Estou tentando pular entre zsh e bash.
Por padrão, tenho zsh como meu shell, posso saber disso digitando:
echo $SHELL
e 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, $SHELL
ainda 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 SHELL
variável é tradicionalmente definida pelo login
programa, "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.
bash
use BASH_VERSION e zsh
use 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.1
se sh for zsh ou 5.0.2(2)-release notzsh
se sh for bash.
Infelizmente, ksh falha ao usar KSH_VERSION com um valor de string.