Mengapa root tidak mencari .bash_profile?

10

Setiap kali saya mencoba login sebagai root menggunakan su(tidak su -), itu tidak sumber .bash_profiledi direktori home user1.

Pada dasarnya, saya /var/rootdirektori tidak memiliki .bash_profile, jadi aku meletakkan salinan dari .bash_profiledalam /var/rootuntuk menguji su -.

Itu tidak secara otomatis sumber .bash_profile(dalam var/root), baik.

Lagi pula, saya ingin membuat .bash_profile, dari user1, bersumber di akun root secara otomatis ketika saya gunakan su.

Apa yang harus saya lakukan?

(Berhasil sebelumnya! Suatu hari, itu tidak sumber! Mungkin ada sesuatu yang mengubah pengaturan di bash? Ia bekerja ketika saya masuk source .bash_profilesetelah login.)

Saya menggunakan Mac dan OS X Yosemite.

Sirion
sumber

Jawaban:

11

Shell default untuk rootpada OS X adalah /bin/sh. Ini shjuga merupakan versi bash, tetapi ketika dipanggil dengan nama shBash :

mencoba meniru perilaku startup dari versi historis shsemirip mungkin, sambil menyesuaikan dengan standar POSIX juga.

Ketika dipanggil sebagai shell login interaktif, atau sebagai shell non-interaktif dengan --loginopsi, ia terlebih dahulu mencoba membaca dan menjalankan perintah dari /etc/profiledan ~/.profile, dalam urutan itu. ... shell dipanggil karena ia tidak berusaha membaca dan menjalankan perintah dari file startup lainnya

Artinya, itu tidak membaca .bash_profilesama sekali, terlepas dari apakah itu dipanggil sebagai shell login atau tidak . Anda bisa menggunakan .profile, atau bahkan menghubungkan satu dengan yang lainnya. Jika Anda meluncurkan shell login dengan su -l, .profiledimuat saat startup, tetapi .bash_profiletidak akan pernah.


Anda juga dapat menggunakandscl untuk mengubah shell root (mencatat bahwa /etc/passwdini tidak digunakan untuk menentukan shell pada OS X). Anda dapat memeriksa shell root saat ini dengan dscl . -read /Users/root UserShell; lihat dokumentasi dan pikirkan baik-baik sebelum mengubahnya ke hal lain.

Pendekatan lain adalah dengan mengubah supermohonan Anda untuk memaksa eksekusi bashsegera.

Mengingat apa yang Anda katakan, saya mungkin akan merekomendasikan symlink, tetapi Anda mungkin ingin melihat perubahan yang dibuat oleh mode POSIX Bash dan memutuskan apakah Anda ingin memilikinya atau tidak.

Michael Homer
sumber
5

Karena itu tidak dianggap sebagai "shell login" (yang dipanggil langsung dari login, atau sshd) tetapi "shell interaktif" sederhana. Lihat di sini misalnya: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Jadi paksa sugunakan opsi login yaitu dengan -lopsi:

su -l

Atau masukkan lingkungan Anda ke .bashrcfile.

myaut
sumber
5

Pengguna root akan mencoba mengeksekusi file .bashrc daripada .bash_profile karena Anda tidak menggunakan shell login.

Dari manual bash man bash:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

Catat di ~mana file .bashrc harus di direktori awal dari pengguna root.

Untuk benar-benar menjawab pertanyaan Anda, jika Anda ingin file .bashrc dari user1 digunakan, saya sarankan Anda membuat tautan (simbolis) antara sumber .bashrc dari user1 ke pengguna root.

Anda juga dapat mempertimbangkan untuk mencari user1 .bashrc atau bahkan .bash_profile dengan menambahkan baris . /homedirectory/of/user1/.bash_profileke file .bashrc dari pengguna root.

Lambert
sumber