簡単なHello World Perlスクリプトがあります。
#!/usr/bin/perl
print 'Hello world.';
を介して実行すると正常に動作しますが、経由perl <file_name>
で実行すると失敗しますsh <file_name>
。
最初の行の私の理解は、Perlシェルを呼び出すことです(#!/ usr / bin / bashがbashシェルを呼び出す方法と似ています)。それでは、これら2つのコマンドの違いは何ですか?
このスレッドを見つけました。http://ubuntuforums.org/showthread.php?t=1133334「この場合、Perlをまったく実行せずに 'print'プログラムを呼び出すシェルを実行しているのsh <file_name>
です。」もしそうなら#!それでは、まだ必要ですか?
(ファイルをchmod + xして直接実行できることを知っていますが、私が使用した2つの方法の違いを知りたいのですが。)
ベストアンサー1
ファイルを直接実行すると
/path/to/script/filename
shebang行を実行するために通訳を検索します。引数を使用してまたはperl
を実行すると、文書化されたsh
とおりに実行されます。つまり、ファイルをそれぞれPerlまたはシェルのスクリプトとして解釈しようとします。
コマンドライン(たとえばsh foo.pl
、またはperl foo.pl
)で明示的にインタプリタを設定すると、実行するインタプリタを決定するためにshebang行は使用されません。それはい可能なオプションは解析されますが、例えばshebangを使用して#!/usr/bin/perl -w
スクリプトを実行するとフラグが有効になるなど、スクリプトを解釈する必要があるperl foo.pl
プログラム-w
を決定するためには使用されません。
したがって、Perlスクリプトを実行するとは、Perl Shebang行にもかかわらず、システムがそれをスクリプトsh foo.pl
として解釈しようとすることを意味します。sh