शबंग में एनवी का उपयोग क्यों करें?


19

#!/usr/bin/env <sh|bash|python>की तुलना में शेबंग का उपयोग करने का उद्देश्य क्या है #!/bin/bash, #!/bin/shया #!/usr/bin/python?


4
Env के सामान्य उपयोग के संबंध में यहाँ एक अच्छा उत्तर है
केविन बोवेन

जवाबों:


11

कुछ लोग सिस्टम की तुलना में एक अलग अजगर (पर्ल, आदि) का उपयोग कर सकते हैं। /usr/bin/env pythonवर्तमान एक के रूप में कॉन्फ़िगर किए गए संस्करण को चलाएगा, संभवतः स्क्रिप्ट को अधिक पोर्टेबल बना देगा।

दूसरी ओर, कथित तौर पर, कुछ प्रणालियों में नहीं है /usr/bin/env। इसके अलावा, आप #!/usr/bin/env foo xएक प्रतिस्थापन के रूप में उपयोग नहीं कर सकते #!foo x, क्योंकि foo xएक ही तर्क के रूप में व्याख्या की जाएगी। तो दृष्टिकोण का मूल्य बहस का मुद्दा है।


1
कहाँ कॉन्फ़िगर किया गया? से info coreutils 'env invocation'मैं बनाता बुला के इस रूप को देख सकते हैं यकीन है कि यह निर्मित खोल के बजाय बाहरी बाइनरी है, लेकिन कोई संकेत नहीं है कि कैसे env pythonसे किसी भी अलग होगा python?
टुमिनोइड

4
आपका PATHशायद /usr/local/binपहले शामिल है । अगर किसी ने वहां मैन्युअल रूप से अजगर स्थापित किया है, तो envइसे कॉल करेगा, जबकि #!/usr/bin/pythonइसे बाईपास करेगा।
रॉबी बसाक

2
virtualenvएक काफी लोकप्रिय उपकरण है, और यह कार्यशील निर्देशिका में एक अजगर निष्पादन योग्य स्थापित करता है। आपको envइसे सही ढंग से काम करने के लिए चाल की आवश्यकता होगी ।
फ्लिम

2
@ टॉमिनोइड: आप सही हैं: env pythonजैसा है वैसा ही है python। हालाँकि समस्या यह है कि आप एक शबंग नहीं लिख सकते हैं #!python: आपको एक पूर्ण पथ निर्दिष्ट करने की आवश्यकता है।
एंड्रिया कोरबेलिनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.