Nell'interpretazione di questo diagramma di flusso
Ho scoperto che in man bash:
Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l'opzione --login, legge prima ed esegue i comandi dal file / etc / profile, se quel file esiste.
Ciò afferma che le shell di login interattive leggono /etc/profile(senza --noprofile)
Inoltre, shell non interattive con l'opzione --loginread/etc/profile
Ciò sembra lasciare alcune possibili shell di login (in cui $0inizia con a -) che non interattive (esegui uno script, forse semplice come date) potrebbero non leggere (sorgente) /etc/profile.
Per confermare o negare questa idea:
Prima ho provato a usare su -l -, che avvia una shell di login con a -come primo carattere ma non riesco a renderlo non interattivo (ed essere in grado di presentare i test per sondarlo).
Chiamando qualcosa di simile
$ bash -c 'date' -bash
Non segnala di essere una shell di accesso (anche se il primo carattere è a -).
Prova questo per rivelare il dettaglio:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016Il
$0ha una-come primo carattere, non c'èi(interattiva) nel valore$-ma non viene riportato come unlogin_shell(-u). In questo caso, / etc / profile non è stato letto, ma non sono sicuro che questo sia il test giusto.
C'è anche la menzione di "rare shell di login non interattive" in questa risposta senza essere abbastanza specifiche per questa domanda.
La conclusione di questo ragazzo è che /etc/profilesi legge sempre.
Leggi la tabella riepilogativa: leggi le shell di login interattive e non interattive /etc/profile
E, se gli esempi di questa pagina sono corretti:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
Il test dei exec su - bob -c 'env'rapporti che è /etc/profilestato letto.
In breve:
È possibile avere una shell di login non interattiva (non chiamata con --login o -l)?
E se vero, sta leggendo il /etc/profilefile?
Se quanto sopra è vero, dobbiamo concludere che TUTTE le shell di login [interattive (o meno)] leggono / etc / profile (senza alcuna --noprofileopzione).
Nota: per rilevare che / etc / profile viene letto, basta aggiungere all'inizio del file questo comando:
echo "'/etc/profile' is being read"

--loginopzione. Per il secondo, se lo faccioexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"ottengo (codificato in C qoutes)$'/etc/profile read\nshopt -s login_shell\nbash himBH', quindi è login ma è interattivo. Abbiamo bisogno di login e non interattivo . Cosa mi manca?