GNU/Linux >> Linux の 問題 >  >> Linux

「execEchoSome; Bashの「EchoTest」は「someTest」を印刷しませんか?

実行中のexec echo "some "; echo "test" bashで「テスト」を出力することはありませんか?

私は小さなシェルスクリプトを書いているので、この質問の確認を求めます。execの後に何も続行しないようにします。 コマンドが呼び出されました。

相談した後は、私の理解では心配する必要はないと思います:

  • man 3 exec
  • man 1p exec

シェルスクリプトを実行すると、シェルスクリプトが作成されます

  1. シェルはプログラムexecを実行します 、これ
  2. 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"

Linux
  1. 〜常に$ homeと等しいですか?

  2. Exec 3とは何ですか?

  3. Bashでのケースステートメントの使用

  1. Bash スクリプトへのすべてのコマンドライン引数を 1 つの変数に格納したい

  2. Bashで変数が数値かどうかをテストするにはどうすればよいですか?

  3. bash スクリプト ループ内の cat ステートメントの出力を出力する

  1. bashスクリプトが同時に実行されないようにする

  2. bashはどのように「false」をテストしますか?

  3. echo $ とは何ですか?行う?