set -e とか trap とかしても、エラーコード返さなきゃ拾えない。
例えば
#!/bin/sh set -e echo hoge | error | : echo "Couldn't catch error."
を実行すると、
sh test.sh test.sh: line 5: error: コマンドが見つかりません Couldn't catch error.
trapしても
#!/bin/sh trap 'echo "Error at line ${LINENO}. Command: ${BASH_COMMAND}. Exit code: $?"; exit 1' ERR echo hoge | error | : echo "Couldn't catch error."
同じ結果。
sh test.sh test.sh: line 5: error: コマンドが見つかりません Couldn't catch error.
サブプロセスがエラーを返さなければひっかからないみたい。
echo hoge | error
としてればちゃんと拾える。