Ich habe festgestellt, dass beim Ausführen eines Befehls direkt auf einem SSH-Host mithilfe der ssh <host> <command>Syntax .bashrcdie 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 .bashrcwiederum), 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_profilevorü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_profileund darin .bashrcbesteht, 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?
.bashrcwarfen einige Zeilen einen Fehler aus, ähnliche Zeilen .bash_profilejedoch 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.bashrckann alle Tools beschädigen, die ssh als Transport verwenden.