Czy istnieje elegancki sposób przechowywania i oceniania wartości zwracanych w skryptach bash?

Mam dość skomplikowaną serię poleceń w bashu, która kończy się zwracaniem znaczącego kodu wyjścia. Różne miejsca później w skrypcie muszą warunkowo rozgałęziać się, czy zestaw poleceń powiódł się, czy nie.

Obecnie przechowuję kod wyjścia i testuję go numerycznie, coś takiego:

long_running_command | grep -q trigger_word
status=$?

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

: more code

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

Z jakiegoś powodu wydaje się, że powinno być prostsze. Mamy prosty kod wyjściowy przechowywany i teraz wielokrotnie wpisujemy operacje testowania numerycznego, aby go uruchomić. Na przykład mogę oszukać kod wyjściowy zamiast kodu powrotu, który jest prostszy do przetestowania dla:

status=$(long_running_command | grep trigger_word)

if [ $status ]; then
    : stuff
else

: more code

if [ $status ]; then
    : stuff
else

Na pierwszy rzut oka wygląda to bardziej prosto, ale zdaję sobie sprawę, że jest brudna.

Jeśli inna logika nie była tak skomplikowana i uruchomiłem ją tylko raz, zdaję sobie sprawę, że mogę umieścić ją w miejscu operatora testu, ale nie jest to idealne rozwiązanie, gdy trzeba ponownie wykorzystać wyniki w innych lokalizacjachbez ponownego uruchamiania testu:

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

Jedyne, co do tej pory znalazłem, to przypisanie kodu w ramach podstawiania poleceń:

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

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

Nawet to nie jest technicznie jednym zadaniem (chociaż niektórzy twierdzą, że czytelność jest lepsza), aleniezbędna składnia testów numerycznych wciąż wydaje mi się kłopotliwa. Może po prostu jestem OCD.

Czy brakuje mi bardziej eleganckiego sposobu przypisania kodu wyjścia do zmiennej, a następnie odgałęzienia go później?

questionAnswers(6)

yourAnswerToTheQuestion