Есть ли элегантный способ хранения и оценки возвращаемых значений в скриптах bash?

У меня есть довольно сложная серия команд в bash, которая в итоге возвращает значимый код выхода. Различные места в дальнейшем в скрипте должны условно переходить в зависимости от того, успешен ли набор команд.

В настоящее время я храню код завершения и проверяю его численно, что-то вроде этого:

long_running_command | grep -q trigger_word
status=$?

if [ $status -eq 0 ]; then
    : stuff
else

: more code

if [ $status -eq 0 ]; then
    : stuff
else

Почему-то кажется, что это должно быть проще. У нас хранится простой код завершения, и теперь мы неоднократно набираем числовые тестовые операции для его запуска. Например, я могу использовать чит для строкового вывода вместо кода возврата, который проще проверить:

status=$(long_running_command | grep trigger_word)

if [ $status ]; then
    : stuff
else

: more code

if [ $status ]; then
    : stuff
else

На первый взгляд это выглядит более прямо, но я понимаю, что это грязно.

Если другая логика не была настолько сложной, и я выполнял ее только один раз, я понимаю, что мог бы внедрить ее вместо оператора теста, но это не идеально, когда вам нужно повторно использовать результаты в других местахбез повторного запуска теста:

if long_running_command | grep -q trigger_word; then
    : stuff
else

Единственное, что я обнаружил, это присвоение кода как части подстановки команд:

status=$(long_running_command | grep -q trigger_word; echo $?)

if [ $status -eq 0 ]; then
    : stuff
else

Даже это технически не одноразовое назначение (хотя некоторые могут утверждать, что читаемость лучше), нонеобходимый числовой тестовый синтаксис все еще кажется громоздким для меня. Может быть, я просто ОКР.

Я скучаю по более элегантному способу присвоения кода завершения переменной, а затем переходу к ней позже?

Ответы на вопрос(6)

Ваш ответ на вопрос