「bash実行ファイル」と「bash -c実行ファイル」の違い

「bash実行ファイル」と「bash -c実行ファイル」の違い

私の理解は、これがbash -c fileインタラクティブbashシェルで呼び出すのと同じであるということですfile。ここではbash file、bashを使用してファイルを解釈することを意味します(シェルスクリプトのように)。これは正しいですか?これがbash <executable>execファイルをフォークして実行するのではなく、ファイルをシェルスクリプトとして解釈しようとするために実行できないのですか?

答え1

まず、バッシュ文書:

-c文字列

オプション処理後、文字列からコマンドを読み取り、実行して終了します。残りのパラメータは$ 0から始まり、位置パラメータに割り当てられます。

-cしたがって、オプションを指定するときは、後続のbash文字列を一連のコマンド-cと見なしてから、サブプロセス環境でそのコマンドを実行してください。したがって、呼び出すときはbash -c fileそれをコマンドとしてbash扱い、環境変数を見つけて見つけます。見つかった場合は実行し、それ以外の場合はコマンドが見つかりませんエラーが発生します。filePATHfile

あなたが電話すると、bash filebashはfileそれを次のように扱います。シェルスクリプト、コマンドを読み取り、実行してfile終了します。また、バッシュ文書:

オプションの処理後に引数があり、-cおよび-sオプションが指定されていない場合、最初の引数はシェルコマンドを含むファイルの名前と見なされます(シェルスクリプトを参照)。このようにしてBashを呼び出すと、$ 0はファイル名に設定され、位置引数は残りの引数に設定されます。 Bashはこのファイルからコマンドを読み取り、実行してから終了します。 Bashの終了ステータスは、スクリプトで実行された最後のコマンドの終了ステータスです。コマンドが実行されない場合、終了ステータスは 0 です。

したがって、あなたの理解は正確です。

答え2

要約すると:

  • bash <file>実行のみ可能シェルスクリプト
  • bash -c <file>実行可能バイナリファイル (例/usr/bin/date:)/usr/bin/echo実行可能ファイル シェルスクリプト

関連情報