Dalam menafsirkan diagram alur ini
Saya menemukan bahwa dalam bash manusia:
Ketika bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan opsi --login, ia pertama kali membaca dan menjalankan perintah dari file / etc / profile, jika file itu ada.
Itu menyatakan bahwa shell login interaktif membaca /etc/profile(tanpa --noprofile)
Juga, kerang non-interaktif dengan opsi --loginbaca/etc/profile
Itu tampaknya meninggalkan beberapa kemungkinan shell login (di mana $0dimulai dengan a -) yang non-interaktif (menjalankan skrip, mungkin sesederhana date) mungkin tidak membaca (sumber) /etc/profile.
Untuk mengkonfirmasi atau menolak ide ini:
Pertama saya mencoba menggunakan su -l -, yang memulai shell login dengan -sebagai karakter pertama tetapi saya gagal membuatnya non-interaktif (dan dapat menyajikan tes untuk menyelidiki itu).
Memanggil sesuatu seperti
$ bash -c 'date' -bash
Tidak melaporkan sebagai shell login (bahkan jika karakter pertama adalah a -).
Coba ini untuk mengungkapkan detailnya:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016The
$0memiliki-sebagai karakter pertama, tidak adai(interaktif) dalam nilai$-tetapi tidak dilaporkan sebagailogin_shell(u yang). Dalam hal ini, / etc / profile tidak dibaca, tetapi saya tidak yakin ini adalah tes yang tepat.
Ada juga yang menyebutkan "kerang masuk non-interaktif yang langka" dalam jawaban ini tanpa cukup spesifik untuk pertanyaan ini.
The Kesimpulan dari orang ini adalah bahwa /etc/profileselalu dibaca.
Baca tabel ringkasan: baik shell login interaktif maupun non-interaktif dibaca /etc/profile
Dan, jika contoh dari halaman ini benar:
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`
Tes exec su - bob -c 'env'laporan yang /etc/profiledibaca.
Pendeknya:
Apakah mungkin untuk memiliki shell login non-interaktif (tidak dipanggil dengan --login atau -l)?
Dan jika benar, apakah itu membaca /etc/profilefile?
Jika hal di atas benar, kita harus menyimpulkan bahwa SEMUA shell login [interaktif (atau tidak)] membaca / etc / profile (tanpa --noprofileopsi).
Catatan: untuk mendeteksi bahwa / etc / profile sedang dibaca, cukup tambahkan di awal file perintah ini:
echo "'/etc/profile' is being read"

--loginopsi. Untuk yang kedua, jika sayaexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"mendapatkan (disandikan dalam C qoutes)$'/etc/profile read\nshopt -s login_shell\nbash himBH'demikian, ini adalah login tetapi interaktif. Kami membutuhkan login dan non-interaktif . Apa yang saya lewatkan?