Cara memperbaiki Terminal yang tidak memuat ~ / .bashrc pada OS X Lion [ditutup]

176

Setiap kali saya membuka tab baru di Terminal menggunakan Cmd+ T, itu membuka bash di direktori yang sama, seperti tab sebelumnya. Ini berfungsi dengan baik ketika saya berada di ~direktori, tetapi jika saya berada di tempat lain, saya mendapatkan kesalahan saat memuat.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Sepertinya .bashrcdimuat melalui jalur relatif dan tidak absolut, karena jika saya lakukan source ~/.bashrc, semuanya bekerja dengan lancar.

bashrc dimuat

Saya pikir ini adalah masalah terkait OS X Lion, karena sebelum upgrade dari Snow Leopard, saya tidak memiliki masalah yang sama. Tapi itu mungkin disebabkan oleh Terminal selalu terbuka di ~, saya tidak ingat jika mencoba membuka direktori yang sama.

Namun pertanyaannya tetap sama, bagaimana saya bisa membuat Terminal memuat ~/.bashrcmelalui jalur absolut, dan bukan relatif?

Jakub Arnold
sumber
1
pertanyaan ini harus dipindahkan ke apple.SE (jika mungkin?), tidak ditutup.
Sparr
@Parr Saya sepenuhnya setuju dengan Anda tetapi moderator hanya memindahkan pertanyaan yang lebih baru bukan yang lebih tua. Lihat diskusi di sini
рüффп

Jawaban:

357

Terminal membuka shell login. Ini berarti, ~/.bash_profileakan dieksekusi, ~/.bashrcbukan.

Solusi pada kebanyakan sistem adalah "membutuhkan" ~/.bashrcdi ~/.bash_profile: cukup taruh cuplikan ini di ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc
ckruse
sumber
8
Adakah yang bisa menjelaskan apa yang [[ -s /file/path ]]dilakukannya? Mencoba ke Google untuk penjelasan tidak terlalu mudah.
Shane
18
From man bash: -s file True jika file ada dan memiliki ukuran lebih besar dari nol.
ckruse
1
"Terminal membuka shell login" - apa tipe lain dari shell? Di mana saya dapat menemukan lebih banyak dokumentasi tentangnya?
dknight
4
Ada yang disebut "shell interaktif" dan "shell login". Manual bash Anda ( man bash) membicarakannya dan menjelaskannya, bab INVOCATION (hanya mencari INVOCATIONsetelah menelepon man bashdengan mengetik /INVOCATION)
ckruse
3
Saya gagal melihat bagaimana pertanyaan yang berkaitan dengan situasi eksekusi kode, diselesaikan dengan satu baris kode, adalah "di luar topik" ke situs pertanyaan pemrograman.
Kheldar
26

Mengganti nama .bashrcmenjadi .profile(atau menautkan yang terakhir dengan yang pertama) juga harus melakukan trik. Lihat di sini .

scorpiodawg
sumber
Atau Anda dapat menghubungkannya: cd && ln -s ./.bashrc ./.profilePerhatikan bahwa symlink sensitif terhadap path file, saya percaya bahwa menggunakan sintaks di atas berfungsi, tetapi untuk memastikan Anda dapat menggunakan path absolut dalam kasus apa pun.
Steve Benner
1
Uh, tidak? File-file ini memiliki tujuan berbeda. Jika Anda memiliki sintaks Bash di dalamnya .profileAnda akan mematahkan reguler sh.
tripleee
14

Saya memiliki yang berikut ini di ~/.bash_profile:

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

Jika .bashrcbukan ~/.bashrc, saya akan melihat gejala yang sama yang Anda lihat.

Keith Thompson
sumber