Sigo leyendo sobre shells interactivos, no interactivos, de inicio de sesión y sin inicio de sesión.
(Esto es en el contexto de cuál de los archivos .bash* se lee).
No entiendo qué es cada tipo de caparazón, así que comencemos con lo básico.
Si hago ssh desde mi Mac a mi máquina Ubuntu, ¿qué tipo de shell se activa?
Respuesta1
Si utiliza SSH en su caja de Ubuntu, obtendrá un shell de inicio de sesión interactivo. Aquí está la diferencia:
Interactivo versus no interactivo:Cualquier shell donde pueda escribir cuando se le solicite es interactivo. De hecho, muchos scripts prueban la variable
$PS1
que contiene la cadena de mensaje para saber si son interactivos. Si un shell está ejecutando un script de shell, no es interactivo.Entonces, si lo hace
ssh yourbox.example.com
, obtendrá un shell interactivo, asumiendo la configuración predeterminada, mientras que si lo hacessh yourbox.example.com mighty_shellscript.sh
, terminará con un shell no interactivo y su sesión SSH finalizará cuando finalice el script.Iniciar sesión versus no iniciar sesión:Cuando inicia sesión desde la consola o de forma remota (como SSH), o cuando pasa la
-l
opción abash
, obtiene un shell de inicio de sesión. De lo contrario, como cuando abre una ventana de terminal, obtendrá un shell sin inicio de sesión.Para probar si un shell es un shell de inicio de sesión, verifique si su nombre de comando es
-bash
en lugar debash
:ps -ef | grep [b]ash
Respuesta2
Obtiene un shell de inicio de sesión interactivo. Pero no lo des por sentado, compruébalo tú mismo.
Esto le indica que tiene un shell de inicio de sesión (desde man bash
):
# shopt | grep login
login_shell on
Esto le indica que tiene un shell interactivo, busque i
(de man bash
):
# echo $-
himBH
El shell de inicio de sesión interactivo que obtiene ha leído /etc/profile
y más de uno de y ~/.bash_profile
, como se explica en :~/.bash_login
~/.profile
man bash
Cuando se invoca bash como shell de inicio de sesión interactivo, o como un shell no interactivo con la opción --login,primero lee y ejecuta comandos del archivo /etc/profile, si ese archivo existe. Después de leer ese archivo, busca ~/.bash_profile, ~/.bash_login y ~/.profile, en ese orden, y lee y ejecuta comandos desde el primero que existe y es legible. La opción --noprofile se puede utilizar cuando se inicia el shell para inhibir este comportamiento.
Respuesta3
Elssh(1)La página de manual dice:
SidominioSi se especifica, se ejecuta en el host remoto en lugar de en un shell de inicio de sesión.
y
Cuando el servidor acepta la identidad del usuario, el servidor ejecuta el comando dado o inicia sesión en la máquina y le proporciona al usuario un shell normal en la máquina remota.
Esos me sugieren que el shell que estás obteniendo es un shell de inicio de sesión.
Respuesta4
Pruebe este comando.
[max@localhost ~]$ eco $SHELL /bin/bash
Obtendrá este resultado porque su tipo de shell está almacenado en esta variable SHELL
.
Para conocer su variable de entorno, escriba este comando
[max@localhost ~]$ entorno . . . NOMBREHOST=localhost.dominiolocal SHELL=/bin/bash TAMAÑOHIST=1000 USUARIO=máx. . . .
mientras escribe, echo $SHELL
imprimirá el valor almacenado aquí
Este valor se actualiza para cada inicio.