Dlaczego root nie pobiera .bash_profile?

10

Za każdym razem, gdy próbuję zalogować się jako root przy użyciu su(nie su -), nie .bash_profileznajduje się w katalogu domowym użytkownika user1.

Zasadniczo mój /var/rootkatalog nie ma .bash_profile, więc mogę umieścić kopię .bash_profilew /var/rootcelu badania su -.

Nie jest też automatycznie źródłem .bash_profile( wejściem var/root).

Tak czy inaczej, chcę, aby .bash_profileużytkownik1 uzyskiwał automatycznie konto root podczas korzystania su.

Co powinienem zrobić?

(Działało to wcześniej! Pewnego dnia po prostu nie robi źródła! Może coś zmieniło ustawienia w bash? Działa, gdy wejdę source .bash_profilepo zalogowaniu.)

Korzystam z systemu Mac i OS X Yosemite.

Sirion
źródło

Odpowiedzi:

11

Domyślną powłoką dla rootsystemu OS X jest /bin/sh. Jest shto również wersja bash, ale po wywołaniu z nazwą shBash :

stara się naśladować zachowanie startowe historycznych wersji shtak dokładnie, jak to możliwe, przy jednoczesnym zachowaniu zgodności ze standardem POSIX.

Wywołany jako interaktywną powłokę logowania lub jako non-interaktywnej powłoki z --loginopcji, to pierwsze próby odczytu i wykonywania poleceń /etc/profilei ~/.profile, w tej kolejności. ... powłoka wywołana, ponieważ sh nie próbuje czytać i wykonywać poleceń z innych plików startowych

Oznacza to, że w ogóle nie czyta .bash_profile, niezależnie od tego, czy została wywołana jako powłoka logowania, czy nie . Możesz .profilezamiast tego użyć lub nawet dowiązać symbolicznie do siebie. Jeśli uruchomisz powłokę logowania za pomocą su -l, .profilezostanie załadowany podczas uruchamiania, ale .bash_profilenigdy nie będzie.


Możesz także użyćdscl do zmiany powłoki roota (zauważając, że nie/etc/passwd jest ona używana do określenia powłoki w OS X). Możesz sprawdzić bieżącą powłokę roota za pomocą dscl . -read /Users/root UserShell; zapoznaj się z dokumentacją i przemyśl dokładnie, zanim zmienisz ją na coś innego.

Innym podejściem jest po prostu zmiana suwywołania w celu wymuszenia bashnatychmiastowego wykonania .

Biorąc pod uwagę to, co powiedziałeś, prawdopodobnie poleciłbym dowiązanie symboliczne, ale możesz przyjrzeć się zmianom, które wprowadził Bash tryb POSIX i zdecydować, czy chcesz je mieć, czy nie.

Michael Homer
źródło
5

Ponieważ nie jest uważany za „powłokę logowania” (wywoływaną bezpośrednio z loginlub sshd), ale zwykłą „powłokę interaktywną”. Zobacz tutaj na przykład: https://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html

Więc wymuś suużycie opcji logowania, tj. Z -lopcją:

su -l

Lub umieść swoje środowisko w .bashrcpliku.

myaut
źródło
5

Użytkownik root spróbuje uruchomić plik .bashrc zamiast .bash_profile, ponieważ nie wywołujesz powłoki logowania.

Z podręcznika bash man bash:

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

Zwróć uwagę, ~gdzie plik .bashrc musi znajdować się w katalogu głównym użytkownika root.

Aby faktycznie odpowiedzieć na twoje pytanie, jeśli chcesz użyć pliku .bashrc użytkownika 1, sugerowałbym utworzenie (symbolicznego) łącza między źródłowym plikiem .bashrc od użytkownika 1 do użytkownika root.

Możesz również rozważyć źródło użytkownika 1 .bashrc lub nawet .bash_profile, dodając wiersz . /homedirectory/of/user1/.bash_profiledo pliku .bashrc użytkownika root.

Lambert
źródło