2012-08-09 11 views
11

実行したいプログラムのパスを知らずにシバン行を指定することはできますか?不明なパスのシェルスクリプトshebang

は多分

#!node 

またはクロスプラットフォーム・ソリューションのための

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

エクストラポイント(各種Linux、BSD、OSXなど...)

いくつかのオプションを指定するパスを指定しません

答えて

14

は、クロスプラットフォームソリューションと具体的に考えられています。

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. 

程度のラインで何か:

#!/usr/bin/env node 

は、クロスプラットフォームと「行くための正しい方法」になります。

+0

+1実際に得られるクロスプラットフォームとして。悲しいことに、POSIXは 'env'がどこにあるかを指定していませんが、'/usr/bin'にはないシステムをまだ見つけていません。誰でもファンキーなOSを見たことがありますか? – Jens

+0

シバンラインで複数のプログラムをパイプでつなぐことは可能ですか? ( '!#/ usr/bin/env cat | nl') –

+0

いいえ、不可能です。必要な場合は別のスクリプトを使用してください。 – Jens

-2

シバンの後ろにスペースを入れてください。プログラムが環境変数PATHにある場合、それは行かなければなりません。もちろん

#! perl 

、Perl用の特殊なケースが

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

だろうこれは@Jens

で述べたように何の/ usr/binに/ ENVが存在しない場合でも、UNIX OSX上で動作します
+0

OSXで私のために働いていない - しかし、ありがとう –

-2

シバンを使用しないでください。

node <<eof 
your node program here 
eof 
+0

@ the-guy-who-downvotedこれは良い考えではないのですか? –

+0

私はdownvoterではありませんが、これはあなたの問題に対処していないので、あなたの問題を解決することはできません。 – Jens

+1

すべてのPOSIX準拠のシステムで動作します。コマンドにオプションを追加して出力をリダイレクトできます。 Linuxの場合、#!/usr/bin/env sh -xは動作しません。 – hipe

0

人々がenvするための標準的な場所は、私たちが唯一のそれは場所ですに関するいくつかの情報をつかむことができないと思いかもしれないものに反して:

  • /usr/bin/env - (Fedoraの - MacOSの(10.12)
  • 両方/bin/env/usr/bin/env 25)

他の人がリストを拡張できると確信しています。