私の理解は、これがbash -c file
インタラクティブbashシェルで呼び出すのと同じであるということですfile
。ここではbash file
、bashを使用してファイルを解釈することを意味します(シェルスクリプトのように)。これは正しいですか?これがbash <executable>
execファイルをフォークして実行するのではなく、ファイルをシェルスクリプトとして解釈しようとするために実行できないのですか?
答え1
まず、バッシュ文書:
-c文字列
オプション処理後、文字列からコマンドを読み取り、実行して終了します。残りのパラメータは$ 0から始まり、位置パラメータに割り当てられます。
-c
したがって、オプションを指定するときは、後続のbash
文字列を一連のコマンド-c
と見なしてから、サブプロセス環境でそのコマンドを実行してください。したがって、呼び出すときはbash -c file
それをコマンドとしてbash
扱い、環境変数を見つけて見つけます。見つかった場合は実行し、それ以外の場合はコマンドが見つかりませんエラーが発生します。file
PATH
file
あなたが電話すると、bash file
bashはfile
それを次のように扱います。シェルスクリプト、コマンドを読み取り、実行してfile
終了します。また、バッシュ文書:
オプションの処理後に引数があり、-cおよび-sオプションが指定されていない場合、最初の引数はシェルコマンドを含むファイルの名前と見なされます(シェルスクリプトを参照)。このようにしてBashを呼び出すと、$ 0はファイル名に設定され、位置引数は残りの引数に設定されます。 Bashはこのファイルからコマンドを読み取り、実行してから終了します。 Bashの終了ステータスは、スクリプトで実行された最後のコマンドの終了ステータスです。コマンドが実行されない場合、終了ステータスは 0 です。
したがって、あなたの理解は正確です。
答え2
要約すると:
bash <file>
実行のみ可能シェルスクリプトbash -c <file>
実行可能バイナリファイル (例/usr/bin/date
:)/usr/bin/echo
と実行可能ファイル シェルスクリプト