bash:終了コードが異なる複数のコマンドが1行にあります

bash:終了コードが異なる複数のコマンドが1行にあります

bashコードでコマンドを実行するためにに提供されている関数を使用しています。私の質問は実装に関するものではありませんが、私の質問に関連する1つは、1行に複数のコマンドを実行する必要があることです。c++systemcstdlibc++

たとえば、別のディレクトリに含まれているgnuplotスクリプトを実行します。だから私のコマンドは次のようになります。

cd some/path; gnuplot -e gnuplot_file.gp; cd - > /dev/NULL

cdどちらのコマンドも個人的な理由で重要です。また、出力を「隠したい」と思います/dev/NULL

gnuplot私の質問は次のとおりです。コマンドの終了ステータスをどのように知ることができますか?失敗するかどうかを知るだけで十分です。

私の問題は、現在の最後のコマンドが失敗しても終了ステータスを取得することですgnuplot

&&代わりに、;前のコマンドが失敗し、終了ステータスがfalseになると、最後のコマンドが実行されないことがわかります。しかし、最後のコマンドを実行する必要があります...

解決策は何ですか?

ベストアンサー1

サブシェルに入れると、gnuplot最後に実行されるコマンドになります。またcd、サブシェルの起動時のディレクトリの変更はそのディレクトリにのみ影響するため、最後のディレクトリは必要なくなり、gnuplotそのディレクトリにリダイレクトすることも/dev/null意味がありません。

( cd some/path; gnuplot -e gnuplot_file.gp )

/dev/nullたぶんコマンド全体にリダイレクトを適用しようとしますか? (しかし、それはあなたの質問に書いたものではありません。)

( cd some/path; gnuplot -e gnuplot_file.gp ) >/dev/null

最後に、私が好むこのようなコードスニペットは、gnuplot最初の成功時にのみ実行されますcd。これは終了状態に影響します。失敗ディレクトリの変更が失敗した場合は返しますが、おそらくより安全なコードです。

( cd some/path && gnuplot -e gnuplot_file.gp ) >/dev/null

おすすめ記事