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 ( .bashrcale) 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 .bashrcz 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_profiletymczasowo 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_profilei .bashrcpolega 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?
.bashrcwprowadzało błąd, podczas gdy podobne linie .bash_profilenie. 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.bashrcmoże zepsuć wszystkie narzędzia, używając ssh jako ich transportu.