Jak ustawić trwałe zmienne środowiskowe dla roota?

40

Aby utworzyć trwałe zmienne środowiskowe, dodaję plik skryptu do katalogu /etc/profile.d, na przykład:

# mój skrypt
eksport MY_VAR = zmienna_wartości

Działa to poprawnie dla bieżącego użytkownika:

alex @ alex-64: ~ $ echo $ MY_VAR
var_value

Teraz potrzebuję tych samych zmiennych środowiskowych dla użytkownika root, ale skrypt /etc/profile.d nie działa dla użytkownika root:

alex @ alex-64: ~ $ echo $ MY_VAR
var_value
alex @ alex-64: ~ $ sudo su
root @ alex-64: / home / alex # echo $ MY_VAR

root @ alex-64: / home / alex # 

Jak ustawić te same zmienne dla katalogu głównego?

Alex F.
źródło
2
To pytanie o zachowanie określonej zmiennej ze środowiska dzwoniącego podczas działania sudojest bardzo powiązane. (Ale to nie jest duplikat, ponieważ to pytanie dotyczy sposobu dostosowania własnego środowiska roota .)
Eliah Kagan

Odpowiedzi:

44

sudo zwykle nie zachowuje lokalnych zmiennych środowiskowych. W tym celu powinieneś użyć go z -Eprzełącznikiem, tzn. sudo -E suZachowa $ MYVAR dla roota.

Alternatywnie, aby stworzyć trwałe zmienne, które są naprawdę systemowe, powinieneś je ustawić /etc/environment.

ish
źródło
14
Nie działa, / sudo / zmienne środowiskowe nie są ustawione dla sudo
Frederic Yesid Peña Sánchez
3
@ FredericYesidPeñaSánchez zrobiło to dla mnie na CentOS. Nie FOO=bar
piszesz
10

Podobnie jak w przypadku procesu definiowania własnej zmiennej środowiskowej, na przykład poprzez edycję „~ / .bashrc”, można zdefiniować zmienną środowiskową root, edytując „/root/.bashrc”.

ppppplv
źródło
8

Defaults env_resetw /etc/sudoerszresetuje root PATHzdefiniowane przez /etc/environment.

Możesz go zmodyfikować, Defaults !env_resetaby wyłączyć resetowanie lub dodać:

Defaults secure_path="my/custom/path:/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin
diyizm
źródło
Jeśli chcę użyć drugiego rozwiązania (znaczy dodać ścieżkę do ścieżki bezpiecznej), co jest kluczowe ?! ścieżka jest po prostu wartością. Chcę dodać ANDROID_NDK do zmiennych środowiskowych dla roota. Na razie korzystam z pierwszego (! Env_reset). Dzięki.
Dr.jacky