.bashrcadalah 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 .bashrctidak terlibat.
sudo su; echo $PATHmenjalankan instance interaktif shell root. Jika itu bash, maka ~root/.bashrcdimuat. Cuplikan ini dieksekusi echo $PATHsetelah 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 $PATHpada prompt shell interaktif yang dimulai oleh sudo su, Anda akan melihat nilai yang ditentukan oleh ~root/.bashrc.
Karena .bashrcdipanggil 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 .bashrcuntuk pengaturan bash interaktif seperti binding kunci, alias dan pengaturan penyelesaian. Setel variabel lingkungan dalam file yang dimuat saat Anda masuk: ~/.pam_environmentatau ~/.profile.
Jadi mengatur PATHdi .profilebukannya .bashrc, dan baik menjalankan shell login dengan sudo -i 'echo $PATH', atau secara eksplisit sumber .profiledengan sudo sh -c '. ~/.profile; echo $PATH'.