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 .bashrcmais 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_profiletemporairement 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_profileet .bashrcest 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?
.bashrclançaient une erreur, tandis que des lignes similaires .bash_profilene 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.bashrcpeut casser tous les outils en utilisant ssh comme transport.