Di Linux dan, setahu saya, semua sistem Unix, emulator terminal menjalankan shell interaktif, non-login secara default. Ini berarti bahwa, untuk bash, shell yang dimulai akan:
Ketika shell interaktif yang bukan shell login dimulai, bash membaca dan mengeksekusi perintah dari
/etc/bash.bashrcdan~/.bashrc, jika file-file ini ada. Ini dapat dihambat dengan menggunakan--norcopsi.The
--rcfilepilihan file akan memaksa bash untuk membaca dan menjalankan perintah dari file bukan/etc/bash.bashrcdan~/.bashrc.
Dan untuk shell login:
Ketika bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan
--loginopsi, bash pertama kali membaca dan mengeksekusi perintah dari file/etc/profile, jika file itu ada. Setelah membaca file itu, tampaknya untuk~/.bash_profile,~/.bash_logindan~/.profile, agar, dan membaca dan mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca.The
--noprofilepilihan mungkin digunakan ketika shell dimulai untuk menghambat perilaku ini.
Pada OSX, bagaimanapun, shell default (yang bash) dimulai di terminal default (Terminal.app) sebenarnya sumber ~/.bash_profileatau lainnya ~.profile. Dengan kata lain, ini bertindak seperti shell login.
Pertanyaan utama : Mengapa shell interaktif interaktif merupakan shell login pada OSX? Mengapa OSX memilih untuk melakukan ini? Ini berarti bahwa semua instruksi / tutorial untuk hal-hal berbasis shell yang menyebutkan mengubah hal-hal di ~/.bashrcakan gagal pada OSX atau sebaliknya ~/.profile. Tetap saja, sementara banyak tuduhan dapat diajukan ke Apple, mempekerjakan devs yang tidak kompeten atau idiot bukanlah salah satunya. Agaknya, mereka punya alasan bagus untuk ini, jadi mengapa?
Subquestions: Apakah Terminal.app benar-benar menjalankan shell login interaktif atau apakah mereka mengubah perilaku bash? Apakah ini khusus untuk Terminal.app atau independen terhadap terminal emulator?