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

としてればちゃんと拾える。