Me di cuenta de que cuando ejecuto un comando directamente en un host SSH usando la ssh <host> <command>
sintaxis, veo la salida de ( .bashrc
pero) la salida de .bash_profile
(o .profile
).
Por ejemplo, si coloco el siguiente comando en la parte superior de ambos archivos,
echo ${BASH_SOURCE[0]}
y fuente manualmente .bash_profile
(que fuentes .bashrc
a su vez), veré
$ . .bash_profile
.bash_profile
.bashrc
Esta es la misma salida que veo si inicio sesión en esta computadora de forma remota a través de SSH, utilizando la ssh <host>
forma del comando. (Y si guardo .bash_profile
en otro lugar temporalmente, ninguna de estas líneas tiene eco).
Sin embargo, si ejecuto un comando directamente en la máquina remota con la ssh <host> <command>
forma de ssh
, entonces la salida se ve así:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Tengo entendido que la diferencia entre .bash_profile
y .bashrc
es que el primero es para shells de inicio de sesión, mientras que el segundo es para shells interactivos, sin inicio de sesión .
He concluido lo siguiente:
ssh <host>
solo fuentes.bash_profile
, mientrasssh <host> <command>
solo fuentes.bashrc
, lo que significa- el primero es un shell de inicio de sesión y el segundo no.
¿Son correctas estas conclusiones? ¿Por qué se ssh <host> <command>
trata como un shell interactivo sin inicio de sesión? ¿SSH todavía no está iniciando sesión en la máquina remota para ejecutar el comando?
.bashrc
estaban arrojando un error, mientras que líneas similares .bash_profile
no. Aproveché la oportunidad para investigar la discrepancia antes de corregir las líneas ofensivas.
.bashrc
? Se supone que ese archivo no produce ningún resultado. Cualquier salida de.bashrc
puede romper todas las herramientas usando ssh como su transporte.