J'ai remarqué que lorsque j'exécute une commande directement sur un hôte SSH en utilisant la ssh <host> <command>
syntaxe, je vois la sortie de .bashrc
mais pas la sortie de .bash_profile
(ou .profile
).
Par exemple, si je place la commande suivante en haut des deux fichiers,
echo ${BASH_SOURCE[0]}
et source manuellement .bash_profile
(quelles sources .bashrc
à leur tour), je vais voir
$ . .bash_profile
.bash_profile
.bashrc
C'est la même sortie que je vois si je me connecte à cet ordinateur à distance via SSH, en utilisant le ssh <host>
formulaire de la commande. (Et si je range .bash_profile
temporairement ailleurs, aucune de ces lignes ne se répercute.)
Cependant, si j'exécute une commande directement sur la machine distante sous la ssh <host> <command>
forme de ssh
, la sortie ressemble à ceci:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Ma compréhension est que la différence entre .bash_profile
et .bashrc
est que le premier est pour les shells de connexion tandis que le second est pour les shells interactifs sans connexion .
J'ai conclu ce qui suit:
ssh <host>
sources uniquement.bash_profile
,ssh <host> <command>
sources uniquement.bashrc
, ce qui signifie- le premier est un shell de connexion et le second ne l'est pas.
Ces conclusions sont-elles correctes? Pourquoi est-il ssh <host> <command>
traité comme un shell interactif sans connexion? SSH ne se connecte-t-il toujours pas à la machine distante pour exécuter la commande?
.bashrc
lançaient une erreur, tandis que des lignes similaires .bash_profile
ne l'étaient pas. J'en ai profité pour enquêter sur l'écart avant de corriger les lignes incriminées.
.bashrc
? Ce fichier n'est pas censé produire de sortie. Toute sortie de.bashrc
peut casser tous les outils en utilisant ssh comme transport.