シェルスクリプトでは、次のように複数のパイプを使用することがよくあります。
cmd1 | cmd2 | cmd3
パイプが存在しない場合、cmd2
「損傷」が発生し、cmd3
入力は受信されません。
回避策としてcmd2が存在するかどうかを明示的にテストできますが、これには避けたいコードの重複が必要です。
代わりに、次のようにもう少し簡潔なテストをしたいと思います。
cmd1 | cmd2; [ $? -eq 127 ] && cat | cmd3
ベストアンサー1
より簡潔にするために、ミニ関数を書くことができます。
ifexists(){
if command -v "$1"
then "$@"
else echo "doing cat for missing $1" >&2
cat
fi
}
echo hi | ifexists mycommand | cat -n