Я хочу написать псевдоним, который будет выглядеть примерно так:
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
в случае сбоя исходной команды.