Псевдоним - это почти текстовая замена. Поэтому после определения псевдонима ввод doit
эквивалентен вводу cd ~/some/dir; ./my_app; cd -
. Это синтаксически правильный список команд, и его возвращаемое значение является возвращаемым значением последней команды в последовательности, здесь cd -
.
Другие ответы показывают общий способ сохранения статуса промежуточной команды и ее возврата. Однако в этом конкретном случае есть лучший способ выразить эту последовательность действий: вместо перехода в другой каталог и затем обратно обратно выполнить действие, для которого требуется другой текущий каталог внутри подоболочки, чтобы текущий каталог оболочка не меняется вообще.
doit () {
(cd ~/some/dir && ./my_app "$@")
}
Я сделал два дополнительных улучшения:
- Используйте
&&
вместо ;
между командами, чтобы не пытаться выполнить my_app
если команда cd
не удалась.
- Разрешить передачу аргументов в
my_app
: если вы запускаете doit foo bar
, my_app
вызывается с двумя аргументами foo
и bar
.