$ echo $SHELL
/bin/bash
$ /bin/ksh93
$ echo $SHELL
/bin/bash
$ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
$ ssh test@localhost
test@localhost's password:
$ echo $SHELL
/bin/ksh93
$ bash
$ echo $SHELL
/bin/ksh93
Espero que $SHELL
cambie después de ejecutar otro shell. ¿Por qué no lo hace?
PD Sin embargo, el shell cambia, solo la variable $ SHELL permanece igual:
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
shell
environment-variables
prisa
fuente
fuente
echo $0
para obtener el shell actualRespuestas:
No debe esperar que esta variable cambie. Se utiliza para almacenar la ruta a su shell predeterminado, es decir, el que está almacenado en la base de datos de contraseñas, no el shell que está ejecutando actualmente.
fuente
SHELL
está especificado por POSIX . Citando:Ejecutar un shell diferente no indica necesariamente un cambio en la preferencia del usuario.
Es bueno aprender los tipos de cosas que POSIX especifica y dónde buscarlos, ya que la mayoría de los sistemas * .nix apuntan a cumplir con POSIX. Las variables de entorno son una de esas cosas.
fuente
La variable SHELL almacena el shell principal para su sesión, que a veces coincide con su shell de inicio de sesión predeterminado . $ SHELL es el shell principal que generó la sesión actual.
entonces, si uso bash para mi usuario y hago esto:
chsh -s /bin/zsh user
cuando lo hagaecho $SHELL
, el shell que se muestra seguirá siéndoloBASH
.ver este artículo .
fuente