ファイルパスを入力してファイルを実行するのと同じですか(shebang行を使用)。

ファイルパスを入力してファイルを実行するのと同じですか(shebang行を使用)。

私にファイルがあるとします。こんにちは:

#!/bin/sh

echo "Hello World!"

ファイルに実行可能ビットが設定されている場合は、プロンプトでそのパスを入力して実行できます。

$ ./hello
Hello World!

上記と同じ内容がより明示的に表示されますか?似ている:

$ execute hello

私は合格できることを知っていますこんにちは引数として使用します/bin/shが、shebang行で指定されたインタプリタを自動的に使用するソリューションを探しています。

私のユースケースは、実行可能フラグを設定せずにスクリプトファイルを実行することです。これらのファイルはgitリポジトリに保存されるため、実行可能フラグを設定したり、最初に別の場所にコピーする必要はありません。

答え1

あなたはそれを使用することができますperl

perl hello

~からperl文書:

#!行に「perl」または「indir」という単語が含まれていない場合、プログラム名は#! Perlインタプリタの代わりに実行されます。これは少し奇妙ですが#!を実行していないコンピュータの人に役立ちます。これはSHELLが/usr/bin/perlであり、Perlがプログラムを正しいインタプリタに送るからです。

渡す)

答え2

次のPerl5スクリプトにはエラーチェックがなく、hashbang行をつかみ、それを呼び出して引数として渡されたスクリプトを実行します。 (ilkkachuの説明に基づいて単純化と圧縮)ファイル全体を読み取らないように...

open FH, ("<",$ARGV[0])
$line = <FH>;
close FH;
if ($line =~ /^\#\!(.*)/) {
    $engine = $1;
    exec("$engine $ARGV[0]");
}

関連情報