Вам следует использовать параметр pipefail
(он также поддерживается в ksh
, оболочке по умолчанию в Solaris):
$ if false | true; then echo ok; else echo failed; fi
ok
$ set -o pipefail
$ if false | true; then echo ok; else echo failed; fi
failed
Вы можете локализовать этот параметр в подоболочке:
if (set -o pipefail; false | true); then echo ok; else echo failed; fi
(замените false
и true
соответствующими командами)