Ich habe festgestellt, dass beim Ausführen eines Befehls direkt auf einem SSH-Host mithilfe der ssh <host> <command>
Syntax .bashrc
die Ausgabe von .bash_profile
(oder .profile
) angezeigt wird, jedoch nicht die Ausgabe von (oder ).
Wenn ich zum Beispiel den folgenden Befehl oben in beiden Dateien platziere,
echo ${BASH_SOURCE[0]}
und manuell Quelle .bash_profile
(welche Quellen .bashrc
wiederum), werde ich sehen
$ . .bash_profile
.bash_profile
.bashrc
Dies ist die gleiche Ausgabe, die ich sehe, wenn ich mich über SSH mit ssh <host>
der Befehlsform remote bei diesem Computer anmelde . (Und wenn ich .bash_profile
vorübergehend woanders verstaue , wird keine dieser Zeilen wiedergegeben.)
Wenn ich jedoch einen Befehl mit der ssh <host> <command>
Form von direkt auf dem Remotecomputer ausführe ssh
, sieht die Ausgabe folgendermaßen aus:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Mein Verständnis ist, dass der Unterschied zwischen .bash_profile
und darin .bashrc
besteht, dass Ersteres für Login-Shells gilt, während Letzteres für interaktive Nicht-Login-Shells gilt .
Ich habe folgendes festgestellt:
ssh <host>
Quellen nur.bash_profile
, währendssh <host> <command>
nur Quellen.bashrc
, was bedeutet- Ersteres ist eine Login-Shell und Letzteres nicht.
Sind diese Schlussfolgerungen richtig? Warum wird ssh <host> <command>
es als interaktive Shell ohne Anmeldung behandelt? Meldet sich SSH nicht immer noch auf dem Remotecomputer an, um den Befehl auszuführen?
.bashrc
warfen einige Zeilen einen Fehler aus, ähnliche Zeilen .bash_profile
jedoch nicht. Ich nutzte die Gelegenheit, um die Diskrepanz zu untersuchen, bevor ich die störenden Linien reparierte.
.bashrc
? Diese Datei soll keine Ausgabe erzeugen. Jede Ausgabe von.bashrc
kann alle Tools beschädigen, die ssh als Transport verwenden.