Bash tidak membaca .bashrc kecuali dimulai secara manual

22

bashtidak akan sumber .bashrcdari terminal interaktif kecuali jika saya menjalankan secara manual bashdari terminal:

$ bash

atau sumbernya secara manual:

$ source ./.bashrc

atau berlari:

$ st -e bash

Inilah beberapa hasil berguna yang saya harap:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

Saya menggunakan CRUX Linux 3.0 dan saya menggunakan dwmdan st. Saya sudah mencoba menggunakan .bash_profiledan .profiletidak berhasil.

Ada ide?

bergegas
sumber

Jawaban:

19

Mengapa itu sumbernya? Anda tidak menjalankan true bash:

$ echo $SHELL
/bin/sh

Dalam kebanyakan sistem modern shadalah symlink ke shell dasar. Di Debian saya misalnya:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

Dalam kasus Anda, shadalah tautan ke bashtetapi, seperti yang dijelaskan dalam man bash:

Jika bash dipanggil dengan nama sh, ia mencoba untuk meniru perilaku startup dari versi historis sh sedekat mungkin, sambil menyesuaikan dengan standar POSIX juga. [...] Ketika dipanggil sebagai shell interaktif dengan nama sh, bash mencari variabel ENV, memperluas nilainya jika didefinisikan, dan menggunakan nilai yang diperluas sebagai nama file untuk dibaca dan dieksekusi. Karena shell dipanggil sebagai sh tidak berusaha membaca dan menjalankan perintah dari file startup lainnya , opsi --rcfile tidak berpengaruh.

dan

--norc
Jangan membaca dan menjalankan file inisialisasi sistem /etc/bash.bashrc dan file inisialisasi pribadi ~ / .bashrc jika shellnya interaktif. Opsi ini aktif secara default jika shell dipanggil sebagai sh.

Jadi, karena shell default Anda adalah sh, .bashrctidak dibaca. Cukup setel shell default Anda ke bash menggunakan chsh -s /bin/bash.

terdon
sumber
Terima kasih. Saya berasumsi itu tidak masalah sejak /bin/shmenunjuk ke /bin/bash. Saya kira masalah ini berasal dari tidak secara eksplisit menetapkan shell /bin/bashketika saya awalnya membuat akun pengguna.
cepat
Juga, Debian / Ubuntu beralih ke dashuntuk /bin/shsebagai bagian dari upaya untuk mengurangi waktu startup. Ini lucu ketika pengguna saya mulai bertanya mengapa shell mereka bertindak berbeda.
kurtm
18

Dalam .bash_profile pastikan Anda memiliki yang berikut ini:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi
Jeight
sumber
1
@terdon Jawaban Anda adalah yang benar. Jawaban saya hanya akan valid jika dia berlari bash. Tangkapan yang bagus, saya melewatkan itu.
Jeight
Ini mungkin memberi Anda beberapa sakit kepala jika Anda menjalankan bashbersama shell lain, seperti ksh93yang menggunakan .profilesecara default.
Kusalananda
Jika ~ / .bash_profile tidak ada, Anda dapat membuatnya.
Pratik Singhal
.bashrc di OS berbasis Debain, .bash_profile di CentOS / Fedora / Mac OS
Mitoxys