Mengapa sumber Mac OS X ~ / .bashrc tidak? [duplikat]

95

Pertanyaan ini sudah ada jawabannya di sini:

Saya menemukan banyak orang mencari tahu mengapa instruksi mirip dengan ini:

Put X to your ~/.bashrc and you can do Y

tidak bekerja

Selalu ternyata file startup bash Mac OS X (atau Bash Mac sendiri) tidak sumber file ~ / .bashrc, baik di shell login, atau di shell yang dihasilkan dari sistem window - seperti aplikasi Terminal di Mac OS X)

Mengapa demikian, ketika semua sistem mirip Unix dengan Bash yang pernah saya gunakan sebelumnya telah melakukan ini?

PS:

Saya menemukan apa yang dikatakan Bash tentang file startup (yang dapat membantu):

Ketika Bash dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan opsi --login, Bash pertama kali membaca dan mengeksekusi perintah dari file / etc / profile, jika file itu ada. Setelah membaca file itu, ia mencari ~ / .bash_profile, ~ / .bash_login, dan ~ / .profile, dalam urutan itu, dan membaca serta mengeksekusi perintah dari yang pertama yang ada dan dapat dibaca. Opsi --noprofile dapat digunakan ketika shell mulai menghambat perilaku ini.

Sumber: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files

Paul Brewczynski
sumber
Saya juga memperhatikan bahwa ~/.bash_profiledieksekusi tetapi tidak ~/.bashrc. Aneh.
igaurav

Jawaban:

90

Di OSX terminal secara default memulai sesi login sehingga membaca .bash_profile dll. (Proses login GUI yang meminta nama dan kata sandi Anda tidak menggunakan skrip shell dan memulai tidak ada shell itu semua dilakukan dari launchd dan ruang kerja)

Di Unix lain xterm menjalankan shell non login secara default sehingga mereka membaca .bashrc sebagai skrip yang menampilkan kata sandi Anda, dll. Saat login memanggil sesi login dan semua terminal adalah sub proses dari ini dan mewarisi lingkungan shell.

Dari dokumen GNU yang Anda maksud

Dipanggil sebagai shell non-login interaktif

Ketika shell interaktif yang bukan shell login dimulai, Bash membaca dan mengeksekusi perintah dari ~ / .bashrc, jika file itu ada. Ini dapat dihambat dengan menggunakan opsi --norc. Opsi file --rcfile akan memaksa Bash untuk membaca dan menjalankan perintah dari file daripada ~ / .bashrc.

Jadi, biasanya, ~ / .bash_profile Anda berisi baris

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

setelah (atau sebelum) inisialisasi khusus login.

pengguna151019
sumber
7
Unicies = Unix?
Paul Brewczynski
8
Yah Unices yang saya maksud - Saya belajar bahasa Latin di sekolah jadi
hilangkan
8
... dan ke-3 dari "Unixen" (meskipun saya lebih suka Unices)
earcam
7
dan keempat "Unicorn" ...
tink
8
jangan lupakan formulir nol, yaitu "kasim"
smatthewenglish
19

bashhanya membaca .bashrcuntuk cangkang non-login :

Ketika shell interaktif yang bukan shell login dimulai, bash membaca dan mengeksekusi perintah dari ~ / .bashrc, jika file itu ada. Ini dapat dihambat dengan menggunakan opsi --norc. Opsi file --rcfile akan memaksa bash untuk membaca dan menjalankan perintah dari file daripada ~ / .bashrc.

Terminal dimulai bashsebagai shell login (dijalankan wuntuk melihat bahwa bashinstance dijalankan sebagai -bash), .bashrctidak pernah dibaca secara otomatis.

nohillside
sumber
Jadi intinya adalah, bahwa aplikasi Termina di Mac OS X selalu membuat "login" instance dari bash? Mengapa Jika Anda benar-benar tidak masuk. (Anda harus masuk lebih awal dari GUI)
Paul Brewczynski
Mengapa sistem unix lainnya TIDAK membaca ~ / .bashrc?
Paul Brewczynski
3
Tidak ada orang di sini yang dapat menjelaskan keputusan desain yang dibuat oleh Apple. Saya bisa dengan mudah memperdebatkan kedua belah pihak tetapi ini juga tidak membantu. Jadi terima saja karena ini mungkin pilihan terbaik
nohillside
Yah, ini adalah pertama kalinya Anda menjalankan shell seperti Anda jadi itu adalah login, di X11 berdasarkan Unices Anda mulai dengan menjalankan shell yang kemudian menjalankan X jadi itu bukan login
user151019
@PaulBrewczynski Yah Linux memiliki panggilan dari .bash_profile ke .bashrc
Paul Stelian