Зефрам ответил на аналогичный вопрос в списке рассылки zsh более 20 лет назад:
Решение состоит в том, чтобы использовать функцию - назовем ее source_bash
- для создания исходного сценария bash:
function source_bash {
emulate -L bash
builtin source "$@"
}
Уловка - это опция localoptions
(задается параметром -L
вызова эмуляции), которая описана следующим образом на странице руководства:
LOCAL_OPTIONS Если этот параметр установлен в точке возврата из функции оболочки, большинство параметров (включая этот), которые действовали при входе в функцию, восстанавливаются; варианты, которые не восстановлены, являются привилегированными и ограниченными. В противном случае, только эта опция и опции LOCAL_LOOPS, XTRACE и PRINT_EXIT_VALUE будут восстановлены. Следовательно, если это явно не установлено функцией оболочки, остальные параметры, действующие в точке возврата, останутся такими. Функция оболочки также может гарантировать себе известную конфигурацию оболочки с формулировкой, подобной `emulate -L zsh '; -L активирует LOCAL_OPTIONS.
Поместите эту функцию в ~/.zshrc
и вам нужно будет только сделать
$ source_bash setupscipt.bash
когда необходимо.