Ho notato che quando eseguo un comando direttamente su un host SSH utilizzando la ssh <host> <command>
sintassi, vedo l'output di .bashrc
ma non l'output di .bash_profile
(o .profile
).
Ad esempio, se inserisco il seguente comando nella parte superiore di entrambi i file,
echo ${BASH_SOURCE[0]}
e fonte manualmente .bash_profile
(quali fonti .bashrc
a loro volta), vedrò
$ . .bash_profile
.bash_profile
.bashrc
Questo è lo stesso output che vedo se accedo a questo computer in remoto tramite SSH, usando il ssh <host>
modulo del comando. (E se rimango .bash_profile
temporaneamente da qualche altra parte, nessuna di queste righe viene ripetuta.)
Tuttavia, se eseguo un comando direttamente sul computer remoto con la ssh <host> <command>
forma di ssh
, l'output è simile al seguente:
$ ssh <host> echo foo
/home/rlue/.bashrc
foo
La mia comprensione è che la differenza tra .bash_profile
ed .bashrc
è che il primo è per le shell di accesso mentre il secondo è per le shell interattive, non di accesso .
Ho concluso quanto segue:
ssh <host>
solo fonti.bash_profile
, mentressh <host> <command>
solo fonti.bashrc
, il che significa- il primo è una shell di accesso e il secondo no.
Queste conclusioni sono corrette? Perché viene ssh <host> <command>
considerata una shell interattiva senza accesso? SSH non sta ancora effettuando l'accesso al computer remoto per eseguire il comando?
.bashrc
entrata generavano un errore, mentre altre linee simili .bash_profile
non lo erano. Ho colto l'occasione per indagare sulla discrepanza prima di correggere le linee offensive.
.bashrc
? Quel file non dovrebbe produrre alcun output. Qualsiasi output da.bashrc
può rompere tutti gli strumenti usando ssh come loro trasporto.