3

Поэтому у меня есть несколько скриптов установки, которые работают только с bash (потому что они используют, например, == или $BASH_SOURCE).

Он работает для получения этих сценариев с помощью команды emulate zsh:

emulate bash
source setupscipt.bash
emulate zsh

Но это сбрасывает мои zsh-опции как "autocd" (установленный в .zshrc).

Как мне начать и выйти из эмуляции bash, чтобы мои настройки остались такими же, как они?

1 ответ1

4

Зефрам ответил на аналогичный вопрос в списке рассылки 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

когда необходимо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .