実行中のexec echo "some "; echo "test"
bashで「テスト」を出力することはありませんか?
私は小さなシェルスクリプトを書いているので、この質問の確認を求めます。exec
の後に何も続行しないようにします。 コマンドが呼び出されました。
相談した後は、私の理解では心配する必要はないと思います:
-
man 3 exec
-
man 1p exec
シェルスクリプトを実行すると、シェルスクリプトが作成されます
- シェルはプログラム
exec
を実行します 、これ -
exec***
を使用します この妨害によって、スクリプトを実行していたシェル/bashを置き換えるファミリシステムコール シェルのさらなるアクション(「置き換えられた」)
前に説明したように、この質問の主な目的は、実行後にスクリプト内で何かが発生するのを防ぐために、私の推論の確認を求めることです(echo test
など)。 )が実行されます。
可能な限り一般的な回答(POSIX)をいただければ幸いですが、特殊な場合に備えて、GNU/LinuxとGNU/Bashに最も関心があります
承認された回答:
exec
ifの場合は常にスクリプトを終了します コマンドを実行し、正常に実行します(コマンドの終了コードではなく、コマンドの開始に関連します)。
exec
コマンドなしで非常に便利な方法で実行できます。ファイル記述子を永続的にリダイレクトするには:
exec 3>/path/to/file
コマンドを開始できない場合、シェルの動作は構成によって異なります。 bash
デフォルトで終了します。
代わりに関数を使用するのが最適な場合があります:
safe_exec () {
cmd="$1"
if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
exit 1
else
exec "[email protected]"
fi
}
safe_exec echo "some "; echo "test"