આ જ પ્રશ્ન theભો થઈ શકે છે જ્યારે ફક્ત બેશ રાશિઓ જ નહીં, કોઈપણ પ્રકારની સ્ક્રિપ્ટનો ઉપયોગ કરો. દુભાષિયો દ્વારા સ્ક્રિપ્ટ ચલાવવા અને તેને સીધા ચલાવવા વચ્ચે કોઈ મોટો તફાવત છે?
ચાલો યુઝ લિનક્સ (યુએલ) ની આ રસપ્રદ પોસ્ટમાં આપણે એક વધુ રહસ્ય જાહેર કરીશું. |
જ્યારે તમે સ્ક્રિપ્ટનું ફાઇલનામ ઇન્ટરપ્રીટર (sh, python, perl, વગેરે) ને આપીને સ્ક્રિપ્ટ ચલાવો છો, ત્યારે તમે ખરેખર દુભાષિયો ચલાવો છો, જે પ્રોગ્રામ તમે દલીલ તરીકે ચલાવવા માંગો છો તે પસાર કરી રહ્યા છો. ઉદાહરણ તરીકે, આપણે તેને ખોટી લખાણથી પસાર કરીને sh દુભાષિયો ચલાવીએ છીએ. દલીલ.
sh myscript.sh
જો તમે સ્ક્રિપ્ટ જાતે જ ચલાવો છો, તો સિસ્ટમ તેની જરૂરિયાતવાળા દુભાષિયાને ક yesલ કરશે અને, પછી, હા, તે સ્ક્રિપ્ટને અમલમાં મૂકશે, તેને દુભાષિયા તરીકેની દલીલ તરીકે પસાર કરશે, પરંતુ બધા આપમેળે અને તે જાણ્યા વગર સ્ક્રિપ્ટ ચલાવનાર વપરાશકર્તા વગર.
./myscript.sh
સ્ક્રિપ્ટ જાતે જ ચલાવવા માટે, 2 શરતો પૂરી કરવી આવશ્યક છે:
1) સ્ક્રિપ્ટમાં "બેંગ લાઇન" શામેલ હોવી આવશ્યક છે. આ સ્ક્રિપ્ટની પહેલી પંક્તિ છે, જેની શરૂઆત અક્ષરોથી થવી જ જોઇએ #! અને તે કે તમારે પાથ સ્પષ્ટ કરવો પડશે કે જ્યાં દુભાષિયા સ્થિત છે. એ નોંધવું અગત્યનું છે કે આ સ્થિતિ કોઈપણ પ્રકારની સ્ક્રિપ્ટ (અજગર, પર્લ, વગેરે) માટે સાચી છે, ફક્ત બાશમાંથી નહીં.
આમ, ઉદાહરણ તરીકે, અમારી સ્ક્રિપ્ટમાં પ્રથમ લીટી તરીકે નીચેના હોવા જોઈએ:
#! / બિન / બૅશ
2) ફાઇલમાં એક્ઝેક્યુટ પરમિશન હોવી આવશ્યક છે:
અમારી સ્ક્રિપ્ટમાં એક્ઝેક્યુશનની પરવાનગી આપવા માટે, આપણે લખવું આવશ્યક છે:
chmod a + x miscript.sh
તૈયાર છે, હવે ફક્ત આની જેમ ચલાવો:
./myscript.sh
અથવા સ્ક્રિપ્ટને "વિશિષ્ટ" પાથ પર કyingપિ કરીને જે તેને સરળતાથી બોલાવવા દે છે. ઉદાહરણ તરીકે, અમે તેને / usr / sbin પર ક copyપિ કરી શકીએ છીએ અને જ્યાં સ્થિત છે ત્યાં સંપૂર્ણ રસ્તો શામેલ કર્યા વિના તેને ગમે ત્યાંથી ચલાવી શકીએ છીએ:
અમે ક copyપિ:
sudo cp miscript.sh / usr / sbin / miscript
અમે ચલાવો:
ખોટી લખાણ
જેમ તમે જોઈ શકો છો, વાસ્તવમાં પડદા પાછળ જે થાય છે તે બંને કિસ્સાઓમાં ખૂબ સમાન છે. જો કે, "બેંગ લાઇન" શામેલ કરીને, તમારી સ્ક્રિપ્ટ્સનું વિતરણ કરવું વધુ સરળ હશે, કારણ કે વપરાશકર્તાઓને તે પાથ યાદ રાખવાની જરૂર રહેશે નહીં કે જ્યાં આવશ્યક દુભાષિયા તેને ચલાવવા માટે સક્ષમ હશે. નિષ્કર્ષ: તે મૂળભૂત રીતે આરામનો પ્રશ્ન છે.
હું તમારી સાથે એર્પાવર સાથે સંમત છું, દુભાષિયોનું સંસ્કરણ અને તેના પાથ બંને ચલ છે અને સતત નથી, તેથી વધુ જો તે ધ્યાનમાં લેવામાં આવે કે જીએનયુ / લિનક્સ વિતરણો ફક્ત બાશનો ઉપયોગ કરે છે (ત્યાં પણ છે: ફ્રીબીએસડી, ઓપનસોલેરિસ , મ )ક) અને તેમાંના ઘણાંની જુદી જુદી ગોઠવણીઓ અથવા રૂટ્સ છે.
અગત્યની વાત એ જાણવી છે કે તમારી પાસે સ્ક્રિપ્ટમાં ક callલ સાથે રમવા માટે સુગમતા (જેમ કે તમે સારી રીતે ઉલ્લેખ કર્યો છે) છે., અથવા શ (અથવા અજગર ... વગેરે) સાથે.
બાશ એ એક કમ્પ્યુટર પ્રોગ્રામ છે જેનું કાર્ય ઓર્ડરનું અર્થઘટન કરવાનું છે.
તે યુનિક્સ શેલ પર આધારિત છે અને પોસિક્સ સુસંગત છે.
તેના બદલે sh એ એક કમ્પ્યુટર પ્રોગ્રામ છે જેનું કાર્ય ઓર્ડરનું અર્થઘટન કરવાનું છે.
પ્રક્રિયા નિયંત્રણ, રીડાયરેક્શન જેવી સુવિધાઓ શામેલ કરે છે
ઇનપુટ / આઉટપુટ, ફાઇલ સૂચિ અને વાંચન, સંરક્ષણ,
દ્વારા પ્રોગ્રામ લખવા માટેની સંદેશાવ્યવહાર અને આદેશની ભાષા
બchesચેસ અથવા સ્ક્રિપ્ટ્સ. તે યુનિક્સના પહેલા સંસ્કરણોમાં વપરાતો દુભાષિયો હતો અને તે ડી ફેક્ટો સ્ટાન્ડર્ડ બન્યો.
નમસ્તે, હું સ્ક્રિપ્ટોના ઉપયોગમાં એક શિખાઉ છું અને હું જાણવાની ઇચ્છા કરું છું કે મારી પાસે જે સમસ્યા છે તેમાં કોઈ મારી મદદ કરી શકે:
હું એક પ્રોગ્રામનું સંચાલન કરી રહ્યો છું જેમાં કન્સોલ દ્વારા ઘણા પ્રારંભિક ડેટાને સમાવિષ્ટ કરવાની આવશ્યકતા છે અને મને જાણવા મળ્યું કે સ્ક્રિપ્ટ દ્વારા પ્રારંભિક ડેટા સાથે પ્રોગ્રામ ચલાવવાનું શક્ય છે, જેથી જ્યારે હું ફરીથી લખતો ન હોઉં ત્યારે પ્રોગ્રામ ચલાવવાની જરૂર છે.
મને તે કેવી રીતે કરવું તે ખબર નથી, તેથી જો કોઈ આની સાથે મને મદદ કરશે તો હું ખૂબ આભારી રહીશ.
જુઓ, તે સ્ક્રિપ્ટ તમે કઈ પ્રોગ્રામિંગ ભાષામાં લખી રહ્યાં છો તેના પર નિર્ભર છે. જો કે, કોઈ પણ સંજોગોમાં તમને જે જોઈએ તે છે:
1) જો તમે ઇચ્છો છો કે જ્યારે પણ સ્ક્રિપ્ટ એક્ઝેક્યુટ થાય ત્યારે વપરાશકર્તાએ તે ડેટા દાખલ કરવો જોઈએ, સૌથી સામાન્ય પ્રક્રિયા એ ઇનપુટમાં દાખલ કરેલા મૂલ્યોને વેરિયેબલ માટે લેવાની છે.
2) જો કિંમતો હંમેશાં સમાન હોય, તો તમે સ્થિરતાનો ઉપયોગ કરી શકો છો.
)) બીજો વિકલ્પ એ સંભાવના છે કે તમારી સ્ક્રિપ્ટ પરિમાણો લઈ શકે.
ચીર્સ! પોલ.
તમે ઉલ્લેખ કરો છો તે રસપ્રદ છે. તેને 2 સ્વરૂપો કહેવામાં આવે છે: શેબેંગ લાઇન અથવા સીધી બેંગ લાઇન. હું તમને માહિતી આપું છું: http://python.about.com/od/programmingglossary/g/defbangline.htm
ચીર્સ! પોલ.
રસપ્રદ, મેં તે વિગતવાર વિશે વિચારવાનું ક્યારેય બંધ કર્યું ન હતું. કન્સોલર રીટ્યુચિંગ પર વધુ લેખો જોવાનું રસપ્રદ રહેશે, તેમાંના ફક્ત બિનજરૂરી કિલો કોડને દૂર કરવા માટે પ્રખ્યાત કર્નલ રિકોમ્પ્લેશન છે જે ફક્ત ત્યાં સુસંગતતા માટે છે અને સિસ્ટમની ગતિમાં સુધારો કરે છે.
બરાબર. હું તે ધ્યાનમાં રાખીશ.
ચીર્સ! પોલ.
મને આનંદ છે કે તે કામ કર્યું. હું હંમેશાં એવી ચીજો પોસ્ટ કરવાનો પ્રયાસ કરું છું જે મને લાગે છે કે તે રસપ્રદ અને વ્યવહારિક હોઈ શકે છે.
આલિંગન! પોલ.
સારી ટેવવાળા દરેક પ્રોગ્રામર કોડની પ્રથમ લાઇનમાં "બેંગ લાઇન" ઉમેરતા હોય છે. પાયથોનમાં હું કોડિંગ અને બેંગ લાઇનને ક્યારેય ભૂલી શકતો નથી.
#! / usr / બિન / અજગર 2.7
# *. * એન્કોડિંગ = utf-8 *. *
ઉત્તમ, આશા છે કે તમે કમાન્ડ લાઇન વિશે વધુ માહિતી પ્રકાશિત કરી શકો છો, ખાસ કરીને જ્યારે સ્રોત ફાઇલો (ટેર. ઝેડ, વગેરે) માંથી કમ્પાઇલ કરવા અથવા ઇન્સ્ટોલ કરવાની વાત આવે છે.
મેં ક્યારેય "બેંગ લાઇન" સાંભળ્યું નથી, હું હંમેશા શેબેંગ તરીકે જાણીતો છું
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
સાદર
રસપ્રદ નોંધ ... આભાર!
કેટલું રસપ્રદ છે, હું પ્રોગ્રામિંગ અને સ્ક્રિપ્ટથી સંબંધિત બધી બાબતોમાં મારી જાતને સંપૂર્ણ રીતે અવગણના કરું છું, તે કેવી રીતે કાર્ય કરે છે તે વિશે મને ખ્યાલ નહોતો, પરંતુ મેં નોંધ્યું છે કે કેટલાકમાં તે હેડર છે.
મારી સાથે જે સ્પષ્ટતા થઈ જેનું આ પ્રવેશ સાથે કરવાનું છે: હું એક એડોબ એર ગેજેટ (એક જાતની ગંજીફાની આજુબાજુનો કેલ્ક્યુલેટર) સ્થાપિત કરવા માંગતો હતો. એડોબ એર ઇન્સ્ટોલર જે કરે છે તે અનુરૂપ સ્ક્રિપ્ટ "સુ" વડે ચલાવવામાં આવે છે પરંતુ ફોર્મમાં ./ તમને રૂટ પાસવર્ડ પૂછવા માટે. જેમ કે સ્ક્રિપ્ટમાં એક્ઝેક્યુશન પરમિશન નથી, તે પરવાનગીને નકારી કા theી, ઉકેલો: જો તમે અનુમતિઓ બદલવા માંગતા ન હો, તો sh સાથે સ્ક્રિપ્ટ ચલાવો (tmp chmod ફોલ્ડર પર જવા કરતાં ઝડપી અને તે બધા). ત્યાં સ્ક્રિપ્ટ ચલાવવામાં આવી છે, તે એડોબ ઇન્સ્ટોલર અને બટરફ્લાયને કંઈક કહે છે.
ખૂબ જ રસપ્રદ લેખ! મને કન્સોલ વિશે થોડું વધુ જાણવા માટે મદદ કરવા બદલ આભાર. ચાલો જોઈએ કે તમે આ જેવા articles લેખો પ્રકાશિત કરવાનું ચાલુ રાખો છો કે કેમ.
ચાલુ રાખો, આ કોઈ શંકા વિના મારો પ્રિય બ્લોગ છે!
ધ્યાનમાં રાખો કે ઉપયોગમાં લેવાતા દુભાષિયાની આવૃત્તિઓ વચ્ચે તફાવત હોઈ શકે છે. સ્ક્રિપ્ટને સીધી શેબંગ મુજબ ચલાવવાનો અર્થઘટન કરનારનું કયું સંસ્કરણ વાપરવું તે સૂચવવાનો કોઈ રસ્તો નથી, જે જરૂરી હોઈ શકે. જો તમે તેના બદલે દુભાષિયા ચલાવો છો અને સ્ક્રિપ્ટને પરિમાણ તરીકે પસાર કરો છો, તો તમે જાણો છો કે તેનું સંસ્કરણ ચાલે છે.
પાયથોનમાં ઉદાહરણ તરીકે, જો શેબેંગ # છે! / Usr / bin / python2.4 પ્રોગ્રામ જુદી જુદી રીતે ચાલશે જો તે # છે! / Usr / bin / python2.6 અથવા તે # છે! / Usr / bin / python (જે સામાન્ય રીતે પાયથોનના સંસ્કરણની પ્રતીકાત્મક લિંક છે જે ડિફ andલ્ટ રૂપે ઇન્સ્ટોલ કરેલી છે અને ગોઠવેલી છે). આ થાય છે કારણ કે પાયથોન 2.6 ની નવી વિધેય છે જે પાયથોન 2.4 માં અસ્તિત્વમાં નથી, તેથી સ્ક્રિપ્ટ લખવી કે જે તે કાર્યક્ષમતાનો ઉપયોગ કરે છે જે #! / Usr / bin / python shebang સૂચવે છે જો સિસ્ટમ ફક્ત અજગર 2.4 ઇન્સ્ટોલ કરેલી હશે. તેના બદલે, તમે હંમેશાં "અજગર 2.4 /path/al/script.py" અથવા "python2.6 /path/al/script.py/ સાથે પ્રારંભ કરીને તમને જોઈતા અજગરની આવૃત્તિ સાથે સ્ક્રિપ્ટને ચલાવવા માટે દબાણ કરી શકો છો.
શેલ સ્ક્રિપ્ટો માટે, તમે ઉપયોગમાં લેતા શેલો વચ્ચે પણ તફાવત છે, તેથી #! / Bin / sh અને #! / Bin / bash નો ઉપયોગ સ્ક્રિપ્ટના આધારે અલગ અલગ પરિણામો આપી શકે છે. જો તમે સ્ક્રીપ્ટ લખો કે જે ફક્ત બેશમાં અસ્તિત્વમાં છે, પરંતુ #! / Bin / sh શેબેંગનો ઉલ્લેખ કરે છે, તો તમારી સ્ક્રિપ્ટ કદાચ લિનક્સ પર કામ કરશે (મોટાભાગના ડિસ્ટ્રિબ્યુશન / બીન / શ પર પ્રતીકાત્મક કડી છે) પણ તે નિષ્ફળ જશે અન્ય યુનિક્સમાં જ્યાં બેશ ઇન્સ્ટોલ કરેલું નથી અથવા જ્યાં / બિન / શ / તે / બિન / બેશ સાથે સાંકેતિક લિંક નથી.
સુવાહ્યતા સાથે સંબંધિત, તે ધ્યાનમાં લેવું આવશ્યક છે કે શેબેંગમાં સૂચવેલો માર્ગ સંપૂર્ણ છે, અને એવા સમયે પણ હોય છે જ્યારે અન્ય સ્થાને દુભાષિયા સ્થાપિત થાય છે. ઉદાહરણ તરીકે, જો તમે તમારા વિતરણમાંથી પેકેજ વાપરવાને બદલે પાયથોન ડાઉનલોડ અને કમ્પાઇલ કર્યું હોય તો / usr / સ્થાનિક / બિન / અજગરમાં અજગર દુભાષિયો સ્થાપિત કરવો સામાન્ય છે. જો તમારી શેબેંગ #! / Usr / બિન / અજગર છે, તો સ્ક્રિપ્ટ તે સિસ્ટમો પર કામ કરશે નહીં. આ સમસ્યાઓથી બચવાનો પ્રયાસ કરવા માટે, તમે શેબેંગ તરીકે ઉપયોગ કરી શકો છો "#! / Usr / bin / env python" (અથવા "#! / Usr / bin / env sh") સમજાવાયેલ મુજબ http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability
આભાર જોનાથન! તમને ટિપ્પણી જોઈને સારું!
ચીર્સ! પોલ.
મારે જે જાણવું છે તે ક્યાંય નથી કરતું, અથવા ઓછામાં ઓછું હું શોધ એન્જિનમાં તેને કેવી રીતે વધારવું તે જાણતો નથી, હું એક સ્ક્રિપ્ટ બનાવવા માંગું છું કે કોઈ કારણસર xX આદેશ યોગ્યતા અથવા «su exec ચલાવે છે (તે ફક્ત એક ઉદાહરણ છે પરંતુ તે 2 કેસ છે જેના વિશે હું વિચારી શકું છું) અને યોગ્યતાના કિસ્સામાં તે મને "યૂન" દાખલ કરવાનું કહે છે અથવા "સુ" માં તે મને પાસવર્ડ પૂછે છે ... હું સ્ક્રિપ્ટને તે વિકલ્પો પસંદ કરવા માંગું છું આપોઆપ કાં તો પરિમાણ પસાર કરીને અથવા કેટલીક પદ્ધતિઓનો ઉપયોગ કરીને જે તે જાણતો નથી .... ધ્યાન બદલ આભાર
હેલો એન્ટોનિયો! જો તમારી સમસ્યાનો પાસવર્ડ દાખલ કરવો પડી રહ્યો છે, તો મને નથી લાગતું કે કોઈ સમાધાન છે. ચોક્કસપણે કારણ કે તે એક સુરક્ષા પગલું છે, જેથી દરેક જણ પ્રોગ્રામ ઇન્સ્ટોલ કરી શકે નહીં.
યોગ્યતા વિશે અને હા પાડવા માટે, મને લાગે છે કે તે હલ થઈ શકે છે. મને આ ક્ષણે વાપરવા માટેનું ચોક્કસ પરિમાણ યાદ નથી, પરંતુ મેન પૃષ્ઠોમાં ફક્ત શોધી કા .ો. ટર્મિનલ ખોલો અને આદેશ દાખલ કરો: man યોગ્યતા.
આલિંગન! પોલ.
ખૂબ જ સારી પોસ્ટ.
મને ખાસ કરીને આ પોસ્ટમાં ગમ્યું - કે જે પ્રશ્ન / શંકા ઉદભવે છે તેનો જવાબ ખૂબ જ સ્પષ્ટ અને સંક્ષિપ્તમાં આપવામાં આવે છે.