Retorna do emulate bash unsets zsh opts

3

Portanto, tenho alguns scripts de configuração em funcionamento, que funcionam apenas com bash (porque usam, por exemplo, == ou $BASH_SOURCE ).

Funciona para gerar esses scripts usando o comando emulate do zsh:

emulate bash
source setupscipt.bash
emulate zsh

Mas isso redefine meu zsh opts como "autocd" (definido em .zshrc).

Como devo começar e sair da emulação de bash, para que minhas opções permaneçam como estão?

    
por Jounathaen 23.03.2018 / 16:08

1 resposta

3

Zefram respondeu a uma pergunta semelhante na lista de discussão zsh há mais de 20 anos :

A solução é usar uma função - vamos chamá-la source_bash - para criar o script bash:

function source_bash {
  emulate -L bash
  builtin source "$@"
}

O truque é a opção localoptions , que é descrita da seguinte forma na página man:

LOCAL_OPTIONS If this option is set at the point of return from a shell function, most options (including this one) which were in force upon entry to the function are restored; options that are not restored are PRIVILEGED and RESTRICTED. Otherwise, only this option, and the LOCAL_LOOPS, XTRACE and PRINT_EXIT_VALUE options are restored. Hence if this is explicitly unset by a shell function the other options in force at the point of return will remain so. A shell function can also guarantee itself a known shell configuration with a formulation like 'emulate -L zsh'; the -L activates LOCAL_OPTIONS.

Coloque esta função no seu ~/.zshrc e você só precisará fazer um

$ source_bash setupscipt.bash

quando necessário.

    
por 23.03.2018 / 19:32