Псевдоним - это почти текстовая замена. Поэтому после определения псевдонима ввод 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 .