2012-08-09 15 views
11

क्या प्रोग्राम के पथ को जानने के बिना एक शेबांग लाइन निर्दिष्ट करना संभव है जिसे आप निष्पादन करना चाहते हैं?अज्ञात पथ के लिए शैल स्क्रिप्ट शेबैंग

शायद पथ निर्दिष्ट नहीं करते

#!node 

या निर्दिष्ट कई विकल्प

#!/usr/local/bin/node 
#!/usr/bin/node 

क्रॉस प्लेटफॉर्म समाधान (लिनक्स, BSD OSX आदि ... के विभिन्न जायके) के लिए अतिरिक्त अंक

उत्तर

14

/usr/bin/env विशेष रूप से पार मंच समाधान के लिए के बारे में सोचा है।

#!/usr/bin/env node 

पार मंच और "जाने के लिए सही तरीके से" हो जाएगा:

env executes utility after modifying the environment as specified on 
the command line. The option name=value specifies an environmental 
variable, name, with a value of value. The option `-i' causes env 
to completely ignore the environment it inherits. 

If no utility is specified, env prints out the names and values of 
the variables in the environment, with one name=value pair per line. 

इसलिए की लाइनों में कुछ।

+0

+1 क्रॉस-प्लेटफार्म के रूप में यह वास्तव में मिलता है। अफसोस की बात है, POSIX निर्दिष्ट नहीं करता है कि 'env' कहां है लेकिन मुझे अभी तक एक सिस्टम नहीं मिला है जहां यह '/ usr/bin' में नहीं है। किसी ने एक फंकी ओएस देखा जहां यह नहीं है? – Jens

+0

शेबांग लाइन में एक साथ पाइप किए गए कई कार्यक्रमों से गुजरना संभव है? ('! #/usr/bin/env cat | nl') –

+0

नहीं, असंभव। यदि आपको जरूरी है तो एक अलग स्क्रिप्ट का प्रयोग करें। – Jens

-2

शेबांग के बाद एक जगह रखें। यदि कार्यक्रम पर्यावरण परिवर्तनीय पाथ में है, तो इसे जाना चाहिए।

#! perl 

बेशक, पर्ल के लिए एक विशेष मामला

: 
eval 'exec perl -S $0 ${1+"[email protected]"}' 
    if 0; 

यह यूनिक्स और OSX, कोई/usr/bin/env है जब भी वहाँ के रूप में @Jens

द्वारा नोट पर काम करता है हो सकता है
+0

ओएसएक्स पर मेरे लिए काम नहीं कर रहा है - लेकिन धन्यवाद –

-2

शेबांग का उपयोग न करें।

node <<eof 
your node program here 
eof 
+0

@ द-लड़का-जो-डाउनवॉटेड यह एक अच्छा विचार क्यों नहीं है? –

+0

मैं डाउनवॉटर नहीं हूं, लेकिन यह आपके प्रश्न को भी संबोधित नहीं करता है और इस प्रकार आपकी समस्या का समाधान नहीं कर सकता है। – Jens

+1

यह सभी POSIX अनुपालन सिस्टम पर काम करता है, आप कमांड में विकल्प जोड़ सकते हैं और आउटपुट रीडायरेक्ट कर सकते हैं। लिनक्स पर यह #!/usr/bin/env sh -x काम नहीं करता है। – hipe

0

लोग क्या सोचते हैं हो सकता है वहाँ env के लिए मानक स्थान इसलिए हम केवल यह स्थान है के बारे में कुछ जानकारी प्राप्त कर सकते हैं नहीं है के विपरीत:

  • /usr/bin/env - (फेडोरा - MacOS (10,12)
  • दोनों /bin/env, /usr/bin/env 25)

मुझे यकीन है कि अन्य लोग सूची का विस्तार करने में सक्षम होंगे।

संबंधित मुद्दे