.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'
.
.profile
? Apakah maksud Anda/root/.profile
atau/home/user/.profile
? Saya mencoba menambahkanexport PATH=$PATH:/mydir
keduanya. Tidak bekerja Saya mencoba tanpaexport
, itu juga tidak berhasil.Lihatlah opsi
-E
dan-i
.-E
: Menunjukkan kebijakan keamanan yang ingin dipertahankan pengguna dari variabel lingkungan yang ada. Kebijakan keamanan dapat mengembalikan kesalahan jika pengguna tidak memiliki izin untuk melestarikan lingkungan.-i
: Jalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti .profile atau .login akan dibaca oleh shell. Jika suatu perintah ditentukan, perintah tersebut diteruskan ke shell untuk dieksekusi melalui opsi -c shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan. sudo mencoba mengubah ke direktori home pengguna tersebut sebelum menjalankan shell. Perintah dijalankan dengan lingkungan yang mirip dengan yang akan diterima pengguna saat masuk. Bagian lingkungan Perintah di sudoers (5) mendokumentasikan bagaimana opsi -i mempengaruhi lingkungan di mana perintah dijalankan ketika kebijakan sudoers dijalankan. digunakan.sumber
Anda bisa
sudo bash
, yang membacabash
file startup seperti yang didokumentasikan dibash
halaman manual / dokumentasi. Harap dicatat, bahwa itu mungkin tidak mengaturHOME
variabel lingkungan dengan benar. Ini dapat diperbaiki dalambash
file startup di seluruh sistem (di/etc
, lokasi yang tepat tergantung pada distro) - uji apakah$uid
0.sumber