Синтаксис правильный, но $?
сбрасывается командой [ ... ]
в операторе if
. По определению, если введен блок if
, то тест [ ... ]
должен быть успешным, а $?
гарантированно будет 0
.
. Вам нужно будет сохранить его в переменной .
result=$?
if ((result != 0)); then
exit "$result"
fi
С другой стороны, более логично c проверять результат команды напрямую, а не $?
. Если вы это сделаете, у вас не возникнет проблем с изменением $?
.
if command; then
echo success
else
exit # `exit` is equivalent to `exit $?`
fi
Если вас не волнует успех, вы можете использовать ||
:
command || exit