பாஷ் கேள்விகளை மட்டுமல்லாமல், எந்த வகையான ஸ்கிரிப்டையும் பயன்படுத்தும் போது இதே கேள்வி எழலாம். மொழிபெயர்ப்பாளர் மூலம் ஸ்கிரிப்டை இயக்குவதற்கும் அதை நேரடியாக இயக்குவதற்கும் பெரிய வித்தியாசம் உள்ளதா?
லினக்ஸ் யூஸ் (யுஎல்) இன் இந்த சுவாரஸ்யமான இடுகையில் நாம் வெளிப்படுத்தும் ஒரு மர்மம். |
ஸ்கிரிப்ட்டின் கோப்பு பெயரை ஒரு மொழிபெயர்ப்பாளருக்கு (sh, python, perl, முதலியன) அனுப்பி ஒரு ஸ்கிரிப்டை இயக்கும்போது, நீங்கள் உண்மையில் மொழிபெயர்ப்பாளரை இயக்குகிறீர்கள், நீங்கள் இயக்க விரும்பும் நிரலை ஒரு வாதமாக கடந்து செல்கிறீர்கள். எடுத்துக்காட்டாக, shcriptter ஐ miscript.sh வாதத்தை அனுப்பி அதை இயக்குகிறோம்.
sh myscript.sh
நீங்கள் ஸ்கிரிப்டை தானாகவே இயக்கினால், கணினி அதற்குத் தேவையான மொழிபெயர்ப்பாளரை அழைக்கும், பின்னர், ஆம், அது ஸ்கிரிப்டை மொழிபெயர்ப்பாளருக்கு ஒரு வாதமாக இயக்கும், ஆனால் தானாகவே மற்றும் ஸ்கிரிப்டை இயக்கிய பயனர் இல்லாமல் அதைப் பற்றி அறிந்து கொள்வார்.
./myscript.sh
ஒரு ஸ்கிரிப்டை தானாக இயக்க, 2 நிபந்தனைகளை பூர்த்தி செய்ய வேண்டும்:
1) ஸ்கிரிப்டில் "பேங் லைன்" இருக்க வேண்டும். இது ஒரு ஸ்கிரிப்ட்டின் முதல் வரி, இது # எழுத்துக்களுடன் தொடங்க வேண்டும்! மற்றும் மொழிபெயர்ப்பாளர் அமைந்துள்ள பாதையை நீங்கள் குறிப்பிட வேண்டும். இந்த நிலை பாஷில் இருந்து மட்டுமல்லாமல், எந்த வகையான ஸ்கிரிப்டுக்கும் (பைதான், பெர்ல், முதலியன) உண்மை என்பதை கவனத்தில் கொள்ள வேண்டும்.
எனவே, எடுத்துக்காட்டாக, எங்கள் ஸ்கிரிப்ட் முதல் வரியாக பின்வருவனவற்றைக் கொண்டிருக்க வேண்டும்:
#! / பின் / பாஷ்
2) கோப்பில் இயக்க அனுமதிகள் இருக்க வேண்டும்:
எங்கள் ஸ்கிரிப்டுக்கு மரணதண்டனை அனுமதி வழங்க, நாம் எழுத வேண்டும்:
chmod a + x miscript.sh
தயார், இப்போது இதை இப்படி இயக்கவும்:
./myscript.sh
அல்லது ஸ்கிரிப்டை "சிறப்பு" பாதையில் நகலெடுப்பதன் மூலம் அதை எளிதாக செயல்படுத்த அனுமதிக்கிறது. எடுத்துக்காட்டாக, நாம் அதை / usr / sbin க்கு நகலெடுத்து, அது அமைந்துள்ள முழு பாதையையும் சேர்க்காமல் எங்கிருந்தும் இயக்கலாம்:
நாங்கள் நகலெடுக்கிறோம்:
sudo cp miscript.sh / usr / sbin / miscript
நாங்கள் இயக்குகிறோம்:
தவறான
நீங்கள் பார்க்க முடியும் என, உண்மையில் திரைக்கு பின்னால் என்ன நடக்கிறது என்பது இரண்டு நிகழ்வுகளிலும் மிகவும் ஒத்திருக்கிறது. இருப்பினும், ஒரு "பேங் லைன்" சேர்ப்பதன் மூலம், உங்கள் ஸ்கிரிப்ட்கள் விநியோகிக்க மிகவும் எளிதாக இருக்கும், ஏனெனில் பயனர்கள் அவற்றை இயக்க தேவையான மொழிபெயர்ப்பாளர்கள் அமைந்துள்ள பாதையை நினைவில் வைத்திருக்க வேண்டியதில்லை. முடிவு: இது அடிப்படையில் ஆறுதலின் கேள்வி.
நான் உங்களுடன் உடன்படுகிறேன் எர்பவர், மொழிபெயர்ப்பாளரின் பதிப்பு மற்றும் அதன் பாதை இரண்டுமே மாறக்கூடியவை மற்றும் நிலையானவை அல்ல, இன்னும் அதிகமாக, குனு / லினக்ஸ் விநியோகங்கள் பாஷைப் பயன்படுத்துவதில்லை என்று கருதப்பட்டால் (அவை உள்ளன: ஃப்ரீ.பி.எஸ்.டி, ஓபன் சோலாரிஸ், மேக்) மற்றும் பல அவற்றில் வெவ்வேறு உள்ளமைவுகள் அல்லது வழிகள் உள்ளன.
முக்கியமான விஷயம் என்னவென்றால், ஸ்கிரிப்டிற்கான அழைப்போடு ./ அல்லது sh (அல்லது பைதான் ... போன்றவை) உடன் விளையாடுவதற்கான நெகிழ்வுத்தன்மை (நீங்கள் நன்கு குறிப்பிட்டது போல்) உள்ளது.
பாஷ் என்பது ஒரு கணினி நிரலாகும், இதன் செயல்பாடு ஆர்டர்களை விளக்குவதாகும்.
இது யூனிக்ஸ் ஷெல்லை அடிப்படையாகக் கொண்டது மற்றும் POSIX இணக்கமானது.
அதற்கு பதிலாக sh என்பது ஒரு கணினி நிரலாகும், இதன் செயல்பாடு ஆர்டர்களை விளக்குவதாகும்.
செயல்முறை கட்டுப்பாடு, திருப்பிவிடுதல் போன்ற அம்சங்களை ஒருங்கிணைக்கிறது
உள்ளீடு / வெளியீடு, கோப்பு பட்டியல் மற்றும் வாசிப்பு, பாதுகாப்பு,
தகவல்தொடர்புகள் மற்றும் நிரல்களை எழுதுவதற்கான கட்டளை மொழி
தொகுதிகள் அல்லது ஸ்கிரிப்ட்கள். இது யுனிக்ஸ் முதல் பதிப்புகளில் பயன்படுத்தப்பட்ட மொழிபெயர்ப்பாளராக இருந்தது, மேலும் இது ஒரு உண்மையான தரநிலையாக மாறியது.
வணக்கம், நான் ஸ்கிரிப்ட்களைப் பயன்படுத்துவதில் ஒரு தொடக்க வீரர், எனக்குள்ள ஒரு பிரச்சினையில் யாராவது எனக்கு உதவ முடியுமா என்பதை அறிய விரும்புகிறேன்:
கன்சோல் மூலம் பல ஆரம்பத் தரவைச் சேர்க்க வேண்டிய ஒரு நிரலை நான் நிர்வகிக்கிறேன், ஒரு ஸ்கிரிப்ட் மூலம் நிரலை ஆரம்ப தரவுகளுடன் இயக்க முடியும் என்பதைக் கண்டறிந்தேன், அதனால் நான் நிரலை இயக்க வேண்டியிருக்கும் போது அதை மீண்டும் மீண்டும் எழுத வேண்டியதில்லை.
இதை எப்படி செய்வது என்று எனக்குத் தெரியவில்லை, எனவே இதை யாராவது எனக்கு உதவ முடிந்தால் நான் மிகவும் நன்றியுள்ளவனாக இருப்பேன்.
பார், நீங்கள் எந்த நிரலாக்க மொழியில் ஸ்கிரிப்டை எழுதுகிறீர்கள் என்பதைப் பொறுத்தது. இருப்பினும், எந்தவொரு சந்தர்ப்பத்திலும் உங்களுக்குத் தேவையானது:
1) ஸ்கிரிப்ட் செயல்படுத்தப்படும் போதெல்லாம் பயனர் அந்த தரவை உள்ளிட வேண்டும் என நீங்கள் விரும்பினால், உள்ளீட்டில் உள்ளிடப்பட்ட மதிப்புகளை ஒரு மாறி எடுத்துக்கொள்வது மிகவும் பொதுவான செயல்முறையாகும்.
2) மதிப்புகள் எப்போதும் ஒரே மாதிரியாக இருந்தால், நீங்கள் மாறிலிகளைப் பயன்படுத்தலாம்.
3) மற்றொரு விருப்பம் உங்கள் ஸ்கிரிப்ட் அளவுருக்களை எடுக்கக்கூடிய சாத்தியம்.
சியர்ஸ்! பால்.
நீங்கள் குறிப்பிடுவது சுவாரஸ்யமானது. இது 2 வடிவங்களில் அழைக்கப்படுகிறது: ஷெபாங் வரி அல்லது நேரடியாக இடி வரி. நான் உங்களுக்கு தகவல் தருகிறேன்: http://python.about.com/od/programmingglossary/g/defbangline.htm
சியர்ஸ்! பால்.
சுவாரஸ்யமாக, அந்த விவரத்தைப் பற்றி சிந்திப்பதை நான் ஒருபோதும் நிறுத்தவில்லை. கன்சோலர் ரீடூச்சிங் குறித்த கூடுதல் கட்டுரைகளைப் பார்ப்பது சுவாரஸ்யமாக இருக்கும், அவற்றில் பிரபலமான கர்னல் மறுசீரமைப்பு தேவையற்ற கிலோ குறியீட்டை அகற்றுவதற்கும் பொருந்தக்கூடிய தன்மைக்கும் மட்டுமே உள்ளது மற்றும் கணினி வேகத்தை மேம்படுத்துகிறது.
சரி. நான் அதை மனதில் வைத்திருப்பேன்.
சியர்ஸ்! பால்.
அது வேலை செய்ததில் மகிழ்ச்சி அடைகிறேன். சுவாரஸ்யமான மற்றும் நடைமுறைக்குரியதாக நான் கருதும் விஷயங்களை எப்போதும் இடுகையிட முயற்சிக்கிறேன்.
ஒரு அரவணைப்பு! பால்.
நல்ல பழக்கமுள்ள ஒவ்வொரு புரோகிராமரும் குறியீட்டின் முதல் வரியில் "பேங் லைன்" சேர்க்கிறது. பைத்தானில் நான் குறியீட்டு முறையையும் பேங் வரியையும் மறக்க மாட்டேன்.
#! / usr / bin / python2.7
# *. * குறியாக்கம் = utf-8 *. *
சிறந்தது, கட்டளை வரியைப் பற்றிய கூடுதல் தகவலை நீங்கள் வெளியிடலாம், குறிப்பாக மூலக் கோப்புகளிலிருந்து (tar.gz, முதலியன) தொகுத்தல் அல்லது நிறுவுதல்.
"பேங் லைன்" பற்றி நான் கேள்விப்பட்டதே இல்லை, அதை நான் எப்போதும் ஷெபாங் என்று அறிந்திருக்கிறேன்
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
மேற்கோளிடு
சுவாரஸ்யமான குறிப்பு… நன்றி!
எவ்வளவு சுவாரஸ்யமானது, நிரலாக்கத்திலும் ஸ்கிரிப்ட் தொடர்பான எல்லாவற்றிலும் நான் முற்றிலும் அறியாதவன் என்று அறிவிக்கிறேன், அது எவ்வாறு இயங்குகிறது என்று எனக்குத் தெரியவில்லை, ஆனால் சிலருக்கு அந்த தலைப்பு இருப்பதை நான் கவனித்தேன்.
இந்த இடுகையுடன் தொடர்புடைய எனக்கு ஏற்பட்ட ஒரு தெளிவு: நான் ஒரு அடோப் ஏர் கேஜெட்டை நிறுவ விரும்பினேன் (ஒரு போக்கர் முரண்பாடு கால்குலேட்டர்). அடோப் ஏர் நிறுவி என்ன செய்கிறது என்பது தொடர்புடைய ஸ்கிரிப்டை "சு" உடன் ஆனால் வடிவத்தில் இயக்குகிறது ./ ரூட் கடவுச்சொல்லை உங்களிடம் கேட்கிறது. ஸ்கிரிப்டுக்கு மரணதண்டனை அனுமதிகள் இல்லாததால், அது அனுமதி மறுக்கப்பட்டது, தீர்வு: நீங்கள் அனுமதிகளை மாற்ற விரும்பவில்லை என்றால் ஸ்கிரிப்டை sh உடன் இயக்கவும் (tmp chmod கோப்புறையில் செல்வதை விட வேகமாக). அங்கு ஸ்கிரிப்ட் செயல்படுத்தப்படுகிறது, இது அடோப் நிறுவி மற்றும் மற்றொரு பட்டாம்பூச்சி விஷயம் என்று அழைக்கப்படுகிறது.
மிகவும் சுவாரஸ்யமான கட்டுரை! கன்சோலைப் பற்றி இன்னும் கொஞ்சம் தெரிந்துகொள்ள உதவியதற்கு நன்றி. இது போன்ற கட்டுரைகளை நீங்கள் தொடர்ந்து வெளியிடுகிறீர்களா என்று பார்ப்போம் ^^.
இதை வைத்துக் கொள்ளுங்கள், இது எனக்கு பிடித்த வலைப்பதிவு என்பதில் சந்தேகமில்லை !!
பயன்படுத்தப்படும் மொழிபெயர்ப்பாளரின் பதிப்புகளுக்கு இடையில் வேறுபாடுகள் இருக்கலாம் என்பதை நினைவில் கொள்ளுங்கள். ஷெபாங்கின் படி ஸ்கிரிப்டை நேரடியாக இயக்குவது, மொழிபெயர்ப்பாளரின் எந்த பதிப்பைப் பயன்படுத்த வேண்டும் என்பதைக் குறிக்க வழி இல்லை, இது அவசியமாக இருக்கலாம். அதற்கு பதிலாக நீங்கள் மொழிபெயர்ப்பாளரை இயக்கி, ஸ்கிரிப்டை ஒரு அளவுருவாக அனுப்பினால், அதன் எந்த பதிப்பு இயங்குகிறது என்பது உங்களுக்குத் தெரியும்.
எடுத்துக்காட்டாக, பைத்தானில், ஷெபாங் #! / Usr / bin / python2.4 என்றால், அது #! / Usr / bin / python2.6 அல்லது அது #! / Usr / bin / python என்றால் வித்தியாசமாக இயங்கும். (இது வழக்கமாக பைதான் பதிப்பிற்கான ஒரு குறியீட்டு இணைப்பாகும், இது இயல்பாக நிறுவப்பட்டு கட்டமைக்கப்படுகிறது). பைதான் 2.6 இல் இல்லாத புதிய செயல்பாட்டை பைதான் 2.4 கொண்டிருப்பதால் இது நிகழ்கிறது, எனவே அந்த செயல்பாட்டைப் பயன்படுத்தும் ஒரு ஸ்கிரிப்டை எழுதுவது #! / Usr / bin / python shebang ஐக் குறிக்கும். அதற்கு பதிலாக, ஸ்கிரிப்டை "python2.4 /path/al/script.py" அல்லது "python2.4 /path/al/script.py/
ஷெல் ஸ்கிரிப்ட்களைப் பொறுத்தவரை, நீங்கள் பயன்படுத்தும் ஷெல்களுக்கும் வேறுபாடுகள் உள்ளன, எனவே #! / பின் / ஷ் மற்றும் #! / பின் / பாஷ் ஆகியவற்றைப் பயன்படுத்துவது ஸ்கிரிப்டைப் பொறுத்து வெவ்வேறு முடிவுகளைப் பெறலாம். பாஷில் மட்டுமே இருக்கும் அம்சங்களைப் பயன்படுத்தி நீங்கள் ஒரு ஸ்கிரிப்டை எழுதினாலும், #! மற்ற யுனிக்ஸ் களில் பாஷ் நிறுவப்படாத இடத்தில் அல்லது / பின் / ஷி / பின் / பாஷுக்கான குறியீட்டு இணைப்பு அல்ல.
பெயர்வுத்திறனுடன் தொடர்புடையது, ஷெபாங்கில் சுட்டிக்காட்டப்பட்ட பாதை முழுமையானது என்பதை கணக்கில் எடுத்துக்கொள்ள வேண்டும், மேலும் பிற இடங்களில் மொழிபெயர்ப்பாளர்கள் நிறுவப்பட்ட நேரங்களும் உள்ளன. எடுத்துக்காட்டாக, உங்கள் விநியோகத்திலிருந்து ஒரு தொகுப்பைப் பயன்படுத்துவதற்குப் பதிலாக பைதான் பதிவிறக்கம் செய்து தொகுத்திருந்தால் பைதான் மொழிபெயர்ப்பாளர் / usr / local / bin / python இல் நிறுவப்படுவது பொதுவானது. உங்கள் ஷெபாங் #! / Usr / bin / python எனில், ஸ்கிரிப்ட் அந்த கணினிகளில் இயங்காது. இந்த சிக்கல்களைத் தவிர்க்க முயற்சிக்க, நீங்கள் விளக்கியுள்ளபடி ஷெபாங் "#! / Usr / bin / env python" (அல்லது "#! / Usr / bin / env sh") பயன்படுத்தலாம் http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability
நன்றி ஜொனாதன்! நீங்கள் கருத்து தெரிவிப்பதைப் பார்ப்பது நல்லது!
சியர்ஸ்! பால்.
நான் தெரிந்து கொள்ள விரும்புவதை எங்கும் செய்யவில்லை, அல்லது தேடுபொறியில் அதை எவ்வாறு உயர்த்துவது என்று எனக்குத் தெரியவில்லை, ஒரு ஸ்கிரிப்டை உருவாக்க விரும்புகிறேன், ஒரு காரணத்திற்காக xX கட்டளை ஆப்டிட்யூட் அல்லது «சு» ஐ செயல்படுத்துகிறது (இது ஒரு எடுத்துக்காட்டு மட்டுமே அவை நான் நினைத்துப் பார்க்கக்கூடிய 2 வழக்குகள்) மற்றும் தகுதியின் விஷயத்தில் அது சில நேரங்களில் "யோன்" அல்லது "சு" இல் என்னை கடவுச்சொல்லைக் கேட்கச் சொல்கிறது ... ஸ்கிரிப்ட் அந்த விருப்பங்களைத் தேர்ந்தெடுக்க விரும்புகிறேன் தானாக ஒரு அளவுருவை அனுப்புவதன் மூலம் அல்லது அது தெரியாத சில முறையைப் பயன்படுத்துவதன் மூலம் .... கவனத்திற்கு நன்றி
வணக்கம் அன்டோனியோ! உங்கள் சிக்கல் கடவுச்சொல்லை உள்ளிட வேண்டுமானால், ஒரு தீர்வு இருப்பதாக நான் நினைக்கவில்லை. துல்லியமாக இது ஒரு பாதுகாப்பு நடவடிக்கை என்பதால், அனைவருக்கும் ஒரு நிரலை நிறுவ முடியாது.
உகந்த தன்மை மற்றும் ஆம் என்று கூறினால், அதை தீர்க்க முடியும் என்று நினைக்கிறேன். இந்த நேரத்தில் பயன்படுத்த சரியான அளவுரு எனக்கு நினைவில் இல்லை, ஆனால் மேன் பக்கங்களில் கண்டுபிடிக்கவும். ஒரு முனையத்தைத் திறந்து கட்டளையை உள்ளிடவும்: man aptitude.
கட்டிப்பிடி! பால்.
மிக நல்ல பதிவு.
நான் குறிப்பாக விரும்பினேன் -இந்த இடுகையில்- எழும் கேள்வி / சந்தேகம் மிகத் தெளிவாகவும் சுருக்கமாகவும் பதிலளிக்கப்படுகிறது.