Возможно, попробуйте запустить соответствующие команды в подоболочке, например?
res=$(some-command > /dev/null; echo $?)
Ответ 4
Используйте функцию обертки для выполнения ваших команд:
function __e {
set +e
"[email protected]"
__r=$?
set -e
}
__e yourcommand arg1 arg2
И используйте $__r вместо $?:
if [[ __r -eq 0 ]]; then
echo "success"
else
echo "failed"
fi
Другой метод вызова команд в трубе, только чтобы вы процитировали этот канал. Это делает безопасную оценку.
function __p {
set +e
local __A=() __I
for (( __I = 1; __I <= $#; ++__I )); do
if [[ "${!__I}" == '|' ]]; then
__A+=('|')
else
__A+=("\"\$$__I\"")
fi
done
eval "${__A[@]}"
__r=$?
set -e
}