Estoy usando un emulador de terminal con bash como shell predeterminado, luego imprimí el valor de la variable de entorno SHELL para imprimir el shell actual y lo hizo, pero cuando entro en otro shell, es decir, zshell, sigue devolviendo el primer valor del uno predeterminado.
¿Cómo hacer que imprima el valor del shell actual en el que resido?
$ echo $SHELL
/bin/bash
$ zsh
unixnode%
$ unixnode% echo $SHELL
/bin/bash
Respuesta1
Cuando inicia sesión con un shell de inicio de sesión, la variable de shell se asigna a ese shell.
Siempre que utilice un shell sin inicio de sesión, como simplemente ejecutar zsh desde la sesión actual del shell de inicio de sesión, el valor de la variable Shell seguirá siendo el mismo, pero si desea cambiarlo al otro shell, deberá hacerlo. tendrá que cerrar sesión y volver a iniciar sesión en el otro shell.
Respuesta2
Cómo llegar a imprimir el valor del shell actual en el que resido
Depende del caparazón. Para shells de tipo POSIX, utilice$0
$ bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
bash
$ /bin/bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
/bin/bash
$ zsh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
zsh
$ ksh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
ksh
$ dash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
dash
El manual de bash tieneesto para decir sobre $SHELL
Algunas cosas más interesantes sobre cómo diferentes conchasinicializar$CÁSCARA
$ unset SHELL; bash -c 'echo $SHELL'
/usr/local/bin/fish
$ unset SHELL; ksh -c 'echo $SHELL'
/bin/sh
$ unset SHELL; zsh -c 'echo $SHELL'
$ unset SHELL; dash -c 'echo $SHELL'
$ unset SHELL; fish -c 'echo $SHELL'
$ unset SHELL; tcsh -c 'echo $SHELL'
SHELL: Undefined variable.