バッシュスクリプトモードの実行

バッシュスクリプトモードの実行

実行の違いは何ですか:

:~$./myscript

:~$bash ./myscript

:~$bash -c "./myscript"

(./myscript実行可能であると仮定)?

答え1

./myscriptmyscriptシェバンで指定されたインタープリタで実行されます。myscript実行可能ビットが設定されている必要があります。

bash ./myscriptmyscriptbash で実行されます。myscript実行可能である必要はなく、bash には実行するファイルが与えられているため、PATH 内でそのファイルを探すことすらなく、bash myscript同様に動作します。

bash -c "./myscript"コマンドを実行するためにBASHインスタンスを開始します。これは、シバンで指定されているインタープリターで実行するようにします./myscript(したがって、BASHプロセスを追加しますbash -cbash -c "echo 'aa';echo 'bb'"

そしてあなたは言及しなかった. ./myscript

答え2

myscriptが実行可能であり、バイナリを指すシェバン行を持っていると仮定すると、単独でbash実行する場合と を実行する場合の違いはありませんが、 を実行するとサブシェル レベルが 1 つ追加されます。これは、 var ( 3 x bash)をチェックすることで確認できます。./myscriptbash ./myscriptbash -c ./myscriptSHLVLbash terminal > running bash -c > running shebang line with bash

通常、bash ターミナル セッションでは、./myscriptshebang 行を実行すると、コマンドを実行する が呼び出されbash、作成されます。bash subshell

30311 pts/0    Ss     0:00 -bash
 8419 pts/0    S+     0:00  \_ /bin/bash ./test.sh
 8420 pts/0    R+     0:00      \_ ps f
SHELL LEVEL: 2  # is 3 when running with bash -c
8419  # that's the $BASHPID

以下のコード (test.sh) を自分で試してみてください。

#!/bin/bash

ps f
echo "SHELL LEVEL: $SHLVL"
echo $BASHPID

関連情報