複数行コマンドの終了コードの取得

複数行コマンドの終了コードの取得

TLDR:cmd1Makefileにランタイム終了コードを保存する方法は?cmd2cmd1 ; cmd2

詳細は:

cmd1 ; cmd2cmd2失敗してもcmd1実行したいので、Makefileで実行しています。

$?cmd1空ですcmd2。それ以外の場合は、次のようにしますcmd1 ; E1=$? ; cmd2 ; E2=$?

a=$(cmd1)人々がSave Exit Code Toの使用を提案したことを見たことがありますが、それもa私にとってはa空であるようです。

答え1

シェルに渡すようにエスケープする必要があります$$$

target:
    cmd1; e1=$$?; cmd2; e2=$$?; echo "cmd1 exited with $$e1, cmd2 with $$e2"; exit "$$(( e1 || e2 ))"
    echo only output if both cmd1 and cmd2 succeeded above
$ make target
cmd1; e1=$?; cmd2; e2=$?; echo "cmd1 exited with $e1, cmd2 with $e2"; exit "$(( e1 || e2 ))"
/bin/sh: 1: cmd1: not found
/bin/sh: 1: cmd2: not found
cmd1 exited with 127, cmd2 with 127
make: *** [Makefile:2: target] Error 1

関連情報