Zauważyłem, że kiedy uruchamiam polecenie bezpośrednio na hoście SSH przy użyciu ssh <host> <command>
składni, widzę dane wyjściowe ( .bashrc
ale) danych wyjściowych .bash_profile
(lub .profile
).
Na przykład, jeśli umieszczę następujące polecenie u góry obu plików,
echo ${BASH_SOURCE[0]}
i ręcznie źródła .bash_profile
(które źródła .bashrc
z kolei), zobaczę
$ . .bash_profile
.bash_profile
.bashrc
To jest to samo wyjście, które widzę, jeśli loguję się do tego komputera zdalnie przez SSH, używając ssh <host>
formularza polecenia. (A jeśli .bash_profile
tymczasowo schuję gdzie indziej, żadna z tych linii nie zostanie wyświetlona).
Jeśli jednak wykonam polecenie bezpośrednio na zdalnym komputerze w ssh <host> <command>
formie ssh
, wówczas dane wyjściowe wyglądają następująco:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
Rozumiem, że różnica między .bash_profile
i .bashrc
polega na tym, że ta pierwsza służy do powłok logowania, a druga do interaktywnych powłok bez logowania .
Doszedłem do następujących wniosków:
ssh <host>
tylko źródła.bash_profile
, podczas gdyssh <host> <command>
tylko źródła.bashrc
, co oznacza- ten pierwszy jest powłoką logowania, a drugi nie.
Czy te wnioski są prawidłowe? Dlaczego jest ssh <host> <command>
traktowany jako interaktywna powłoka bez logowania? Czy SSH nadal nie loguje się na zdalnym komputerze, aby wykonać polecenie?
.bashrc
wprowadzało błąd, podczas gdy podobne linie .bash_profile
nie. Skorzystałem z okazji, aby zbadać rozbieżność przed ustaleniem linii obrażających.
.bashrc
? Ten plik nie powinien generować żadnych danych wyjściowych. Każde wyjście.bashrc
może zepsuć wszystkie narzędzia, używając ssh jako ich transportu.