क्यों मेरे सिस्टम पर काम नहीं कर रहा है #? / Usr / bin / env बैश?


11

मैं कुछ मुद्दों पर भाग गया जब कुछ स्थापना स्क्रिप्ट चला रहे थे जहां उन्होंने शिकायत की थी bad interpreter

इसलिए मैंने एक तुच्छ उदाहरण दिया, लेकिन मैं यह पता नहीं लगा सकता कि समस्या क्या है, नीचे देखें।

#!/usr/bin/env bash
echo "hello"

निम्न त्रुटि में परिणाम के ऊपर स्क्रिप्ट निष्पादित करना

[root@ech-10-24-130-154 dc-user]# ./junk.sh
bash: ./junk.sh: /usr/bin/env: bad interpreter: No such file or directory

/usr/bin/envफ़ाइल मौजूद है, नीचे देखें:

[root@ech-10-24-130-154 dc-user]# ls -l /usr/bin/env
lrwxrwxrwx 1 root root 13 Jan 27 04:14 /usr/bin/env -> ../../bin/env
[root@ech-10-24-130-154 dc-user]# ls -l /bin/env
-rwxr-xr-x 1 root root 23832 Jul 16  2014 /bin/env
[root@ech-10-24-130-154 dc-user]#

अगर मैं नियमित शेबंग का उपयोग करने के लिए स्क्रिप्ट को बदल देता हूं तो #!/bin/bashयह कोई समस्या नहीं है। #!/bin/env bashसाथ ही काम करता है।

पोर्टेबल शेबंग को काम करने की अनुमति देने के लिए पर्यावरण से क्या गायब है?

ls -lL /usr/bin/envरिटर्न ls: cannot access /usr/bin/env: No such file or directoryइसलिए मुझे लगता है मैं सांकेतिक लिंक को बदलने के लिए की आवश्यकता है? क्या मैं इसे इंगित कर सकता हूं /bin/env?

env --version 8.4 है और OS Red Hat Enterprise Linux सर्वर रिलीज 6.6 है।


1
आमतौर पर यह कैरिज-रिटर्न / लाइन-फीड की समाप्ति के कारण होता है। वैकल्पिक रूप से: एनवी का स्थान
थॉमस डिकी

जवाबों:


7

ls -lL /usr/bin/envदिखाता है कि प्रतीकात्मक लिंक टूट गया है। यह बताता है कि शेबंग लाइन क्यों काम नहीं कर रही है: कर्नेल एक लटकते हुए प्रतीकात्मक लिंक को निष्पादित करने के लिए, और स्पष्ट रूप से विफल हो रहा है।

/usr/bin/env -> ../../bin/envअगर सही है /usrऔर /usr/binदोनों वास्तविक निर्देशिका (नहीं सिमलिंक) कर रहे हैं। जाहिर है यह आपकी मशीन पर मामला नहीं है। शायद /usrएक प्रतीकात्मक लिंक है? (जाहिर है कि यह एक प्रतीकात्मक लिंक नहीं है /, अन्यथा एक प्रतीकात्मक लिंक के /usr/bin/envरूप में एक ही फ़ाइल होगी /bin/env)।

आपको उस प्रतीकात्मक लिंक को ठीक करना होगा। आप इसे एक पूर्ण लिंक बना सकते हैं:

sudo ln -snf /bin/env /usr/bin/env

आप इसे एक सापेक्ष लिंक बना सकते हैं, लेकिन यदि आप ऐसा करते हैं, तो सुनिश्चित करें कि यह सही है। सिमिंक बनाने से पहले यह पुष्टि करने के लिए स्विच करें /usr/binऔर चलाएं ls -l relative/path/to/bin/envकि आपने इसे ठीक कर लिया है।

यह एक डिफ़ॉल्ट आरएचईएल सेटअप नहीं है, इसलिए आपने स्थानीय रूप से कुछ संशोधित किया होगा। यह पता लगाने की कोशिश करें कि आपने क्या किया और क्या इससे अन्य समान समस्याएं हो सकती हैं।


यह सही है, /usr/binएक अन्य फाइल सिस्टम में स्थानांतरित कर दिया गया है और यह एक प्रतीकात्मक कड़ी है/vol_01/usr/bin
conorgriffin

-1

यहां (फेडोरा 23) /binएक प्रतीकात्मक कड़ी है /usr/bin; यदि आपके पास एक समान सेटअप है, तो /usr/bin/envबस प्रतीकात्मक लिंक आपको एक अनंत लूप खरीदता है।

संबंधित पैकेजों की जाँच करें rpm -qf /usr/bin/env /bin/env, और, (यहाँ coreutils, यानी yum reinstall coreutilsया समान) को पुनर्स्थापित करें । कि किसी भी भ्रामक छेड़छाड़ को ठीक करना चाहिए।


मैंने पहले से ही पुन: स्थापित किया coreutilsलेकिन इससे कोई फर्क नहीं पड़ा। यह बहुत अजीब है। /usr/bin/envयह लक्ष्य के सापेक्ष पथ के साथ एक प्रतीकात्मक लिंक है ../../bin/env। तो वह होना चाहिए /bin/envजो मौजूद है। तो मुझे समझ में नहीं आता कि यह प्रतीकात्मक लिंक काम क्यों नहीं करता है। मैंने लक्ष्य को बदल दिया, इसलिए यह /bin/envएक निरपेक्ष मार्ग की ओर इशारा करता है और ऐसा लगता है कि काम किया है।
कॉनरग्रिफिन

यदि /binकरने के लिए एक प्रतीकात्मक कड़ी था /usr/binconorgriffin के सिस्टम पर, तो /usr/bin/envऔर /bin/envएक ही फाइल होगा।
गिलेस एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.