Mam użytkownika, powiedzmy user1
, który ma modyfikacje .bash_profile
, jeden z nich zmienia PATH
np export PATH=/some/place:$PATH
. : . Zmiana ta działa dobrze, jeśli loguję się jako user1
lub zrobić su - user1
.
Ale gdy próbuję uruchomić polecenie poprzez su
jak root
np:
su -c test.sh oracle
(test zawiera echo $PATH
)
Wydaje się, że nie ma zmodyfikowanych PATH
(ani root PATH
). Próbowałem również kopiować .bash_profile
do .profile
, ale bezskutecznie.
Dlaczego to się dzieje?
rhel
environment-variables
su
NullUser
źródło
źródło
su
Odpowiedzi:
Używanie
su
bez-l
lub-
zaczyna siębash
jako interaktywna powłoka, ale bez logowania, która nie odczytuje z żadnego z określonych plików. Użyj-l
lub-
opcję lub umieścić odpowiedni do config/root/.bashrc
.Szybkie podsumowanie plików konfiguracyjnych:
-l
/--login
) ma/etc/profile
pierwszy, a następnie pierwszy znajdzie się z:~/.bash_profile
,~/.bash_login
i~/.profile
.-i
) czyta/etc/bash.bashrc
i~/.bashrc
, w tej kolejności (chyba że--rcfile
opcja jest użyta i każe jej szukać gdzie indziej).-l
lub-i
, odczytują plik określony wBASH_ENV
zmiennej środowiskowej.sh
powłoka logowania będzie czytać/etc/profile
i~/.profile
w tej kolejności.sh
interaktywny login nie odczytuje pliku określonego wENV
.źródło
Bash zachowuje się inaczej w zależności od tego, czy uważa, że jest to powłoka logowania, tj. Pierwsza powłoka uruchamiana po zalogowaniu do systemu. Czyta tylko,
.bash_profile
jeśli jest to powłoka logowania. Jeśli zamiast tegoPATH
wstawisz zmienny kod.bashrc
, zostanie on uruchomiony dla wszystkich interaktywnych powłok bash, a nie tylko dla loginów.źródło
Jeśli używasz środowiska Gnome w Scientific Linux 6 (lub prawdopodobnie RHEL 6), uruchom terminal. Idź do
Edit
->Profile Preferences
->"Title and Command"
zakładka. Upewnij się, że pole wyboru „Uruchom polecenie jako powłoka logowania” jest zaznaczone. Odkryłem, że aplikacja terminalu Gnome ignoruje moją,.bash_profile
chyba że to zrobię.źródło