Diagnosticar um erro de script no zsh vs bash

0

Estou recebendo um erro ao usar um script em zsh, mas o erro retorna apenas um pequeno x vermelho no meu prompt, em vez de stderr. Usando o script no bash não retorna nenhum erro e funciona como esperado. Eu estou apenas usando zsh bare-bones, não OMZ, etc.

Existe uma maneira de gerar o erro em zsh para me dar uma ideia de onde procurar?

Eu não acho que isso tenha algo a ver com o software que estou instalando, mas com o zsh; no entanto, nem sei por onde começar a procurar. Mais informações básicas para os interessados:

Eu instalei um pacote comumente usado para simulações de dinâmica computacional de fluidos (CFD) chamada OpenFOAM . O OpenFOAM é um projeto que tem muitas versões diferentes disponíveis, e como o carregamento simultâneo de diferentes versões resulta em namespaces conflitantes, é comum usar um alias para carregar uma única versão no caminho do shell. Por exemplo, meu arquivo .zshrc contém as seguintes linhas:

alias  of5x="source $HOME/OpenFOAM/OpenFOAM-5.x/etc/bashrc $FOAM_SETTINGS"
alias  of4x="source $HOME/OpenFOAM/OpenFOAM-4.x/etc/bashrc $FOAM_SETTINGS"
alias of30x="source $HOME/OpenFOAM/OpenFOAM-3.0.x/etc/bashrc $FOAM_SETTINGS"

Quando eu uso o alias para carregar a versão mais recente ( 5x ), sou saudado com um x vermelho na minha linha de comando:

    
por cbcoutinho 13.10.2017 / 13:40

2 respostas

1

O script em questão destina-se a ser usado em qualquer shell compatível com POSIX, como ele mesmo diz:

#     Should be usable by any POSIX-compliant shell (eg, ksh)

Os scripts nesta parte do OpenFOAM são simplesmente divididos em twain em scripts para shells e scripts C para shells em conformidade com POSIX. Esse script em particular faz muito pouco além de if , [ , export e unset e não há nenhum problema de idiossincrasias de shell do Bourne Again.

A verdade simples é que a pergunta incorretamente declara

I'm just using bare-bones zsh

Na verdade, o questionador claramente tem um PROMPT que imprime uma cruz vermelha se o status de saída do último comando for diferente de zero (como este de um tema powerline ). Claro que é diferente de zero para este script em particular, porque o último comando no script é:

[ "$BASH" ] && . $WM_PROJECT_DIR/etc/config.sh/bash_completion

Isso gera um status de saída diferente de zero para o script no shell Z, o que faz com que o prompt do questionador exiba o caractere vermelho. Ironicamente, essa verificação foi feita para garantir que o script corra alegremente com os shells Korn e Z; o que acontece, a cruz vermelha e o status de saída são problemas puramente cosméticos.

O uso de caracteres Unicode fora do padrão powerline private-use-area no prompt é uma indicação de que este não é o prompt do shell vanilla Z em ação aqui.

Leitura adicional

por 13.10.2017 / 14:24
1

zsh e bash são intérpretes para dois idiomas diferentes, você não pode esperar que zsh seja capaz de interpretar qualquer código escrito para bash , mas você pode ser capaz de fazer:

alias of5x="emulate bash -c 'source $HOME/OpenFOAM/OpenFOAM-5.x/etc/bashrc $FOAM_SETTINGS'"

Para zsh inserir um modo de emulação bash para executar o comando source .

Esse emulate reduzirá mas não eliminará as diferenças entre zsh e bash. Observe que qualquer função declarada nesse arquivo de origem manterá esse modo de emulação.

Em qualquer caso, o formato da variável prompt é completamente diferente em bash e zsh, então não espero que um script escrito exclusivamente para o bash consiga definir um prompt que também funcione para o zsh.

    
por 13.10.2017 / 13:48