.bashrc
adalah file konfigurasi bash, hanya ketika dijalankan secara interaktif. Ini hanya dimuat ketika Anda memulai bash, bukan ketika Anda menjalankan beberapa program lain seperti sh
(bahkan jika bash dipanggil melalui nama sh
). Dan itu hanya dimuat saat bash bersifat interaktif, bukan saat menjalankan skrip atau perintah -c
.
sudo sh -c 'echo $PATH'
atau sudo bash -c 'echo $PATH'
tidak menggunakan shell interaktif, jadi .bashrc
tidak terlibat.
sudo su; echo $PATH
menjalankan instance interaktif shell root. Jika itu bash, maka ~root/.bashrc
dimuat. Cuplikan ini dieksekusi echo $PATH
setelah shell interaktif ini berakhir, jadi apa pun yang terjadi di shell interaktif tidak memiliki pengaruh pada apa yang dicetak snippet di akhir. Tetapi jika Anda mengetik echo $PATH
pada prompt shell interaktif yang dimulai oleh sudo su
, Anda akan melihat nilai yang ditentukan oleh ~root/.bashrc
.
Karena .bashrc
dipanggil di setiap shell interaktif, bukan oleh shell login (bahkan oleh shell login interaktif, yang merupakan cacat desain di bash), itu adalah tempat yang salah untuk mendefinisikan variabel lingkungan. Gunakan .bashrc
untuk pengaturan bash interaktif seperti binding kunci, alias dan pengaturan penyelesaian. Setel variabel lingkungan dalam file yang dimuat saat Anda masuk: ~/.pam_environment
atau ~/.profile
.
Jadi mengatur PATH
di .profile
bukannya .bashrc
, dan baik menjalankan shell login dengan sudo -i 'echo $PATH'
, atau secara eksplisit sumber .profile
dengan sudo sh -c '. ~/.profile; echo $PATH'
.