Ho notato che quando eseguo un comando direttamente su un host SSH utilizzando la ssh <host> <command>sintassi, vedo l'output di .bashrcma 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 .bashrca 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_profiletemporaneamente 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_profileed .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?
.bashrcentrata generavano un errore, mentre altre linee simili .bash_profilenon 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.bashrcpuò rompere tutti gli strumenti usando ssh come loro trasporto.