Пропустить код статуса выхода после использования ||

Пропустить код статуса выхода после использования ||

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

alias baz="false || echo bar"

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

$ false; echo $?
1
$ false || echo foo; echo $?
0

Я хочу выполнить другую операцию, которая будет вести себя так же во всех отношениях, как и false || echo foo, за исключением того, что когда я echo $?это сделаю, она вернет 1.

Примечание:Я ожидаю, что эта echo fooчасть в принципе всегда будет успешной.

решение1

Функция сохранения возвращаемого значения команды не так уж сложна:

f() {
    some-command-that-can-fail
    retval=$?
    if [ "$retval" != 0 ] ; then
         echo the command failed
    fi
    return $retval
}

Если вас не интересует точное возвращаемое значение, а нужен просто ненулевой код возврата, то подойдет следующий вариант:

somecmd || ( echo it failed ; false )

Вам нужна подоболочка (или составной блок) для запуска финальной команды только falseв случае сбоя исходной команды.

Связанный контент