Saya memiliki pengguna, katakan user1 , yang memiliki modifikasi pada .bash_profile , salah satunya mengubah PATH , misalnya:export PATH=/some/place:$PATH . Perubahan ini berfungsi dengan baik jika saya masuk sebagai user1 atau lakukan su - user1 .
Tetapi jika saya mencoba menjalankan perintah melalui su sebagai root , misalnya:
su -c test.sh oracle
(tes berisi echo $PATH )
Tampaknya tidak memiliki PATH yang dimodifikasi (atau PATH root's , untuk hal tersebut). Saya juga mencoba menyalin .bash_profile ke .profile , tidak berhasil.
Mengapa ini terjadi?
Jawaban yang Diterima:
Menggunakan su tanpa -l atau - memulai bash sebagai shell interaktif, tetapi non-login, yang tidak membaca dari salah satu file yang Anda tentukan. Gunakan -l atau - atau masukkan konfigurasi yang relevan ke /root/.bashrc .
Ringkasan cepat file konfigurasi:
- Login shell (
-l/--login) membaca/etc/profilepertama, dan kemudian yang pertama ditemukan:~/.bash_profile,~/.bash_login, dan~/.profile. - Cangkang interaktif tapi non-login (
-i) membaca/etc/bash.bashrcdan~/.bashrc, dalam urutan itu (kecuali--rcfileopsi digunakan dan memintanya untuk mencari di tempat lain). - Cangkang non-interaktif, mis. dimulai dari dalam program lain tanpa menggunakan
-latau-iflag, membaca file yang ditentukan dalamBASH_ENVvariabel lingkungan. - Saat dijalankan sebagai
shsebagai shell login, ia akan membaca/etc/profiledan~/.profile, dalam urutan itu. - Saat dijalankan sebagai
shsebagai non-login interaktif, ia membaca file yang ditentukan dalamENV.