Используйте функцию-оболочку. Наверное, с другим именем.
$ exito() { "$@"; echo $?; }
$ exito true
0
$ exito false
1
$ exito echo "test test"
test test
0
$
(Это, конечно, испортит стандартный вывод, поэтому либо используйте tty
, как показано @Kusalananda, либо не используйте его вне интерактивного контекста.)
Сворачивая на непереносимую территорию, некоторые оболочки могут сообщать о статусе всех команд в конвейере, а не только последней, например. в ZSH, если вы хотите сообщать о сбоях всего конвейера:
% TRAPZERR() { print >/dev/tty $pipestatus }
% perl -e 'exit 42' | perl -e 'exit 99'
42 99
% false | perl -e 'exit 42' | perl -e 'exit 99'
1 42 99
% perl -e 'exit 42' | perl -e 'exit 99' | true
%
TRAPZERR
в противном случае не срабатывает, если нет ошибки (в принципале «нет новостей — это хорошие новости» ).