Как проверить, равен ли код завершения команды заданному значению в одной строке?
Я ищу эквивалент следующего без необходимости сначала запускать команду и получать $?
:
diff a.txt b.txt
if [ $? = 2 ]; then
echo diff failed
exit 2
fi
Это отличается от следующих вопросов, поскольку этот вопрос касается проверки того, равен ли код выхода определенному значению, а не нулю или нет:
Не существует ярлыка для различения ненулевых кодов выхода. Хотя можно написать это так:
if diff a.txt b.txt; [ $? = 2 ]; then
echo diff failed
exit 2
fi
Вы можете добиться этого в одной строке, используя && и || операторы. Эти операторы позволяют выполнить команду и немедленно проверить ее статус завершения.
diff a.txt b.txt || { [ $? -eq 2 ] && echo "diff failed" && exit 2; }