A variável de ambiente SHELL ainda aponta para zsh após usar o bash

A variável de ambiente SHELL ainda aponta para zsh após usar o bash

Estou tentando pular entre zsh e bash.

Por padrão, tenho zsh como meu shell, posso saber disso digitando:

echo $SHELLe eu recebo/bin/zsh

No entanto, quero abrir o Bash, então digito /bin/bash; Presumo que estou no bash agora, mas se eu fizer eco, $SHELLainda recebo/bin/zsh

O que há de errado, por favor?

Responder1

SHELL é uma variável de ambiente que é passada do bash para o zsh quando você chama o zsh. SHELL não é um dosParâmetros definidos pelo Shellem zsh, então seu valor permanece intacto.

bash$ SHELL=turtle zsh
zsh$ echo $SHELL
turtle 

Para obter indicações de que você está em um shell zsh, tente:

echo $ZSH_NAME
echo $0

A SHELLvariável é tradicionalmente definida pelo loginprograma, "conforme especificado pelo banco de dados de senhas". (copiado deO que define a variável de ambiente $SHELL?)

Responder2

Muitos shells definem uma variável de versão na inicialização.

bashuse BASH_VERSION e zshuse ZSH_VERSION.

Definir ambas as variáveis ​​com um valor conhecido detectará com segurança qual shell foi iniciado:

BASH_VERSION=notbash ZSH_VERSION=notzsh sh -c 'echo "$BASH_VERSION $ZSH_VERSION"'

imprimirá notbash 5.3.1se sh for zsh ou 5.0.2(2)-release notzshse sh for bash.

Infelizmente, ksh falha ao usar KSH_VERSION com um valor de string.

informação relacionada