Ustawienie zmiennej PATH w / etc / environment vs. .profile

58

Gdzie jest preferowane miejsce na ustawienie PATHenvvar?

~/.profileczy /etc/environment?

Co się dzieje, gdy PATHjest ustawiony w obu miejscach? Czy wynik końcowy jest połączeniem obu wartości ustalonych w tych dwóch miejscach?

pkaramol
źródło
Oczywiście decyduje ostatnie przypisanie do PATH. Większość skryptów ustawia to wprost na początku skryptu.
AlexP
3
Zobacz help.ubuntu.com/community/… .
edwinksl

Odpowiedzi:

70

Podsumowanie:

  • Jeśli chcesz dodać ścieżkę (np. /your/additional/path) Do PATHzmiennej tylko dla bieżącego użytkownika, a nie dla wszystkich użytkowników komputera, zwykle umieszczasz ją na końcu ~/.profilejak w jednym z tych dwóch przykładów:

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    Zauważ, że priorytety ścieżki maleją od lewej do prawej, więc pierwsza ścieżka ma najwyższy priorytet. Jeśli dodasz ścieżkę po lewej stronie $PATH, będzie miała najwyższy priorytet, a pliki wykonywalne w tej lokalizacji zastąpią wszystkie inne. Jeśli dodasz swoją ścieżkę po prawej, będzie miała najniższy priorytet i preferowane będą pliki wykonywalne z innych lokalizacji.

  • Jeśli jednak musisz ustawić tę zmienną środowiskową dla wszystkich użytkowników, nadal nie zalecałbym dotykania, /etc/environmentale utworzenie pliku o nazwie kończącej się .shna /etc/profile.d/. /etc/profileSkrypt i wszystkie skrypty /etc/profile.dsą globalny odpowiednik każdy użytkownik osobista ~/.profilei wykonane jako zwykłe skrypty powłoki przez wszystkie skorupy podczas inicjalizacji.


Więcej szczegółów:

  • /etc/environmentto ogólnosystemowy plik konfiguracyjny, co oznacza, że ​​jest używany przez wszystkich użytkowników. Jest jednak własnością root, więc musisz być administratorem i sudomodyfikować go.

  • ~/.profilejest jednym z osobistych skryptów inicjujących powłoki użytkownika. Każdy użytkownik ma jeden i może edytować swój plik bez wpływu na innych.

  • /etc/profilei /etc/profile.d/*.shsą to globalne skrypty inicjujące, które są równoważne ~/.profiledla każdego użytkownika. Skrypty globalne są jednak wykonywane przed skryptami specyficznymi dla użytkownika; a main /etc/profilewykonuje wszystkie *.shskrypty /etc/profile.d/tuż przed wyjściem.


  • /etc/environmentPlik zawiera zwykle tylko ten wiersz:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    Ustawia PATHzmienną dla wszystkich użytkowników w systemie na tę wartość domyślną, której nie należy zmieniać w znaczący sposób. Przynajmniej nie należy usuwać żadnych istotnych ścieżek, takich jak /bin, /sbin, /usr/bini /usr/sbinod niego.

    Ten plik jest odczytywany jako jeden z pierwszych plików konfiguracyjnych przez każdą powłokę każdego użytkownika. Zauważ, że nie jest to skrypt powłoki . To tylko plik konfiguracyjny, który w jakiś sposób jest analizowany i który może zawierać tylko przypisania zmiennych środowiskowych!

  • ~/.profilePlik może zawierać wiele rzeczy, domyślnie zawiera pośród innych rzeczy do sprawdzenia, czy ~/binkatalog istnieje i dodaje, że do istniejącego użytkownika PATHzmiennej, tak (na starszych wydaniach Ubuntu przed 16.04 - nowsze wersje dodać go bezwarunkowo):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    Widzisz, że stara wartość PATHtutaj zostaje ponownie użyta, a nowa ścieżka jest dołączana tylko na początku, zamiast zastępować wszystko. Kiedy chcesz ręcznie dodać nowe ścieżki, zawsze powinieneś zachować starą $PATHwartość gdzieś w nowym ciągu.

    Ten skrypt inicjalizacyjny jest odczytywany tylko przez powłoki użytkownika, do którego należy, ale jest jeszcze jeden warunek:

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    Więc jeśli używasz domyślnej powłoki Bash, powinieneś upewnić się, że nie masz ~/.bash_profilelub ~/.bash_loginjeśli chcesz, aby zmiany ~/.profilemiały wpływ na użytkownika.


Pełne zrozumienie zmiennych środowiskowych można znaleźć na stronie : https://help.ubuntu.com/community/EnvironmentVariables


Powiązane pytanie: różnica między plikiem bash.bashrc i plikiem / etc / environment

Bajt Dowódca
źródło
2
Obecnie ~/.profilenie sprawdza istnienia ~/bin, ale po prostu ma linię:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Zdefiniuj „teraz”, proszę? Używam 16.04 i tak to tam wygląda.
Bajt Dowódca
2
/etc/skel/.profilew 16.04 ma wiersz, o którym wspomniałem. Najwyraźniej utworzyłeś użytkownika w poprzedniej wersji.
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Dzięki za informacje - jeszcze jakieś pięć minut temu myślałem, że domyślnie ~/.profileteż to mam, ale masz rację - /etc/skel/.profilenie ma go w moim zaktualizowanym systemie 16.04 (i konto użytkownika utworzone podczas instalacji 16.04 na inna maszyna tego nie ma .profile).
Eliah Kagan
2
„... wykonywane jako zwykłe skrypty powłoki przez wszystkie powłoki podczas ich inicjalizacji.” Myślę, że to wprowadza w błąd. Może sugerować (niektórym), że po prostu otwarcie powłoki terminala bez logowania z pulpitu GUI uruchomi / etc / profile, czego nie zrobi. askubuntu.com/questions/155865/…
Hawkeye Parker
22

Ta odpowiedź dotyczy głównie kolejności, w jakiej zmienne środowiskowe PATHsą przypisywane, gdy są określone w różnych plikach konfiguracyjnych. Obejmuję również to, gdzie zwykle powinieneś je ustawić, ale poniższa lista nie zawiera plików w kolejności, w której powinieneś rozważyć ich użycie. Aby uzyskać ogólne informacje na temat ustawiania PATHi innych zmiennych środowiskowych w Ubuntu, zalecam również przeczytanie zmiennych środowiskowych i innych odpowiedzi na to pytanie.

Preferowane miejsce do ustawienia PATHzależy od użytkowników, dla których należy go ustawić oraz kiedy i jak chcesz to ustawić. Częścią Twojej decyzji będzie to, czy chcesz ustawić zmienną środowiskową dla wszystkich użytkowników, czy dla poszczególnych użytkowników. Jeśli nie masz pewności, zalecamy ustawienie go tylko dla jednego użytkownika (np. Konta), a nie całego systemu.

Jak mówi AlexP , PATHzmienna środowiskowa będzie miała wartość, którą została ostatnio przypisana . W praktyce przez większość czasu, który ustawiłeś PATH, dołączasz starą wartość PATHdo nowej wartości, aby poprzednie wpisy zostały zachowane.

Dlatego w praktyce, gdy PATHjest ustawiony z wielu plików, zwykle zawiera wpisy podane we wszystkich plikach. Ale dzieje się tak tylko dlatego, że wszystkie pliki, które ją ustawiają, z wyjątkiem pierwszego, zwykle odwołują się do PATHsamej zmiennej, powodując włączenie jej starej wartości do nowej.

Dlatego w rzeczywistości pytasz o kolejność, w jakiej obowiązują PATHustawienia w różnych plikach.

Typowe miejsca ogólnego przeznaczenia, które należy ustawić, PATHsą wymienione poniżej w kolejności, w której obowiązują one po zalogowaniu się użytkownika, a nie w kolejności, w której zwykle należy rozważyć ich użycie . Każde z wymienionych poniżej miejsc jest rozsądnym wyborem do ustawienia PATH w niektórych sytuacjach , ale tylko niektóre z nich są dobrym wyborem przez większość czasu.

Na poniższej liście zobaczysz niektóre nazwy katalogów, takie jak ~/.profile. Jeśli nie jesteś zaznajomiony z rozszerzeniem tyldy , ~/odwołuje się do katalogu domowego bieżącego użytkownika. Głównie używam tej składni ze względu na zwartość. Jest obsługiwany w skryptach powłoki, ale nie w plikach konfiguracyjnych PAM.

1. Dla wszystkich użytkowników: /etc/environment

PAM na Ubuntu powoduje ustawienie zmiennych środowiskowych wymienionych w /etc/environment, jeśli plik istnieje, co domyślnie tak jest. W ten sposób najczęściej ustawiane są zmienne środowiskowe dla wszystkich użytkowników.

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Jeśli musisz ustawić zmienne środowiskowe dla wszystkich kont użytkowników, a nie tylko dla konta użytkownika, to modyfikacja tego pliku jest prawdopodobnie najlepszym wyborem. Najpierw zalecamy wykonanie kopii zapasowej. Jednym ze sposobów utworzenia kopii zapasowej tego pliku jest uruchomienie:

sudo cp /etc/environment /etc/environment.orig

.origRozszerzenie nie jest specjalnie potrzebne - można czuć się dobrze o nazwanie pliku kopii zapasowej wszystko co nie jest mylące lub już używany. (Zresztą .orig, .old, .backupi .baksą wspólne.)

Można edytować ten plik w dowolny sposób można edytować dowolny inny plik jako użytkownik root ( sudoedit /etc/enviromnment, sudo nano -w /etc/environment, gksudo gedit /etc/environment, itd.)

/etc/environmentnie obsługuje automatycznego dołączania starej wartości zmiennej. Ale zwykle nie jest to konieczne, ponieważ przez większość czasu ustawiasz zmienną środowiskową dla wszystkich użytkowników, edytując /etc/environment, chciałbyś, aby była to początkowa wartość, gdy użytkownik się loguje. Użytkownik może następnie zmienić to, co chce. Zwykle dobrze jest, aby użytkownicy mogli to zrobić.

2. Dla wszystkich użytkowników: /etc/security/pam_env.conf

PAM odczytuje zmienne środowiskowe dla wszystkich użytkowników /etc/security/pam_env.conf, określone za pomocą tej samej składni, co w ~/.pam_environmentplikach na użytkownika (patrz poniżej).

Gdy ta sama zmienna środowiskowa jest ustawiona zarówno w, jak /etc/environmenti /etc/security/pam_env.conf, pam_env.confużywana jest wartość in - nawet jeśli ta wartość jest podana jako DEFAULTzamiast OVERRIDE.

Jednak po zastąpieniu linii environmentjednym z nich pam_env.confmożna dołączyć zawartość zastąpionej wartości. Szczegółowe informacje można znaleźć w poniższej sekcji .pam_environment(ponieważ używa tej samej składni).

Zazwyczaj edycja nie jest konieczna pam_env.confi powinieneś być bardzo ostrożny , ponieważ zniekształcona linia zwykle uniemożliwia zalogowanie się wszystkim zwykłym kontom użytkowników! Na przykład domyślna pam_env.confzawiera linie:

#PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Jest to przedstawione jako jeden z kilku przykładów. Jedną z rzeczy, które ilustruje, jest podział zadania na wiele linii \. Załóżmy, że odkomentowałeś tylko pierwszą linię, ale zapomniałeś odkomentować drugą linię:

PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Nie rób tego!

Właśnie to przetestowałem przez przypadek i uniemożliwiło to pomyślne zalogowanie się użytkowników. Aby to naprawić, musiałem uruchomić komputer w trybie odzyskiwania i zmienić go z powrotem. (Na szczęście zrobiłem to na maszynie wirtualnej, której używam tylko do testowania rzeczy, więc nie sprawiło mi to żadnych problemów).

3. Dla jednego użytkownika: .pam_environmentw katalogu osobistym użytkownika

Jednym ze sposobów ustawienia zmiennej środowiskowej dla pojedynczego użytkownika jest edytowanie (lub tworzenie) .pam_environmenttego katalogu w tym katalogu domowym. Wartości ustawione w tym pliku zastępują wartości ustawione w /etc/environmentpliku globalnym .

.pam_environmentnie jest częścią szkieletu plików, który jest kopiowany do folderu domowego użytkownika, gdy konto użytkownika jest początkowo tworzone. Jeśli jednak utworzysz ten plik w katalogu domowym, możesz go użyć do ustawienia zmiennych środowiskowych, takich jak PATH. W przeciwieństwie do /etc/environment(ale jak /etc/security/pam_env.conf), .pam_environmentpliki na użytkownika obsługują rozszerzanie starej wartości zmiennej środowiskowej na nową. Nie są to jednak skrypty powłoki i aby to osiągnąć, musisz użyć specjalnej składni, która różni się nieco od składni, której użyłbyś w pliku takim jak .profile.

Na przykład, jeśli masz bin2katalog w swoim katalogu domowym, który chcesz dodać na końcu PATH, możesz to zrobić, dodając ten wiersz do .pam_environment:

PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2

Patrz na ~/.pam_environmentpodsekcję z EnvironmentVariables (z których w powyższym przykładzie jest ściśle dostosowaną) man pam_env, a man pam_env.confdalsze szczegóły.

Chociaż był to kiedyś reklamowany jako preferowany sposób zmiany lub dodania zmiennych środowiskowych przez użytkowników Ubuntu i nadal jest uważany za rozsądny i akceptowalny wybór, należy zachować ostrożność podczas edycji.pam_environment . Podobnie jak zmiany w całym systemie /etc/security/pam_env.conf(patrz wyżej), zniekształcona linia w .pam_environmentpliku użytkownika uniemożliwi pomyślne logowanie. (Ja testowałem to. - celowo ten czas) Aby uzyskać informacje na temat zalecenia zostały ewoluowały , zobacz Gunnar Hjalmarsson „s komentarze poniżej i ta ubuntu-develdyskusja .

Taki błąd jest ogólnie znacznie mniej poważny niż zniekształcona linia pam_env.conf, ponieważ dotyczy tylko jednego użytkownika. Jednak w przypadku stacjonarnego systemu Ubuntu z tylko jednym kontem użytkownika, które umożliwia logowanie, taki błąd podczas edycji .pam_environmentbędzie tak samo zły jak edycja błędna pam_env.conf- jeśli nie jesteś jeszcze zalogowany, nie będziesz w stanie naprawić to bez uruchamiania w trybie odzyskiwania (lub z USB na żywo itp.).

(Jeśli masz inne konta użytkowników, możesz zalogować się jako inny użytkownik i naprawić problem. Nawet jeśli nie są oni administratorami i nie mogą sudorootować, mogą nadal działać i zostać poproszony o podanie Twojego (nie własnego) hasła . na gość konto, jednak nie może tego zrobić, ponieważ jest zakaz wykorzystywania do przyjęcia tożsamości innego użytkownika).su your-accountsu

4. Dla wszystkich użytkowników: /etc/profilei plików w środku/etc/profile.d/

Powłoki kompatybilne z Bourne (w tym bashdomyślna powłoka użytkownika w Ubuntu) uruchamiają polecenia, /etc/profilegdy są wywoływane jako powłoka logowania.

Ubuntu /etc/profile.dkończy się na:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Powoduje to również uruchomienie poleceń z dowolnego pliku w /etc/profile.d/katalogu, którego nazwa kończy .shsię na.

Większość menedżerów wyświetlania powoduje, że polecenia w /etc/profile(a zatem i pliki w /etc/profile.d) są uruchamiane również w celu logowania graficznego. Jednak nie wszyscy tak robią, a to znaczący argument na korzyść korzystania z udogodnień udostępnianych przez PAM (patrz wyżej) - chyba że nigdy nie będzie żadnych graficznych loginów do tego systemu, co może mieć miejsce na przykład, jeśli jest to serwer bez zainstalowanego GUI.

Tradycyjnie ustawia się systemowe zmienne środowiskowe /etc/profile, ale często nie jest to już najlepszy wybór. Jeśli nie możesz ustawić zmiennej środowiskowej /etc/environmenti musisz ją ustawić dla wszystkich użytkowników, prawdopodobnie lepiej jest utworzyć nowy plik /etc/profile.d/niż edytować /etc/profile. Jednym z powodów jest to, że po aktualizacji Ubuntu może pojawić się nowy /etc/profileplik domyślny . W zależności od tego, w jaki sposób wykonasz aktualizację, albo stary plik (ze zmianami) zostanie zachowany, z pominięciem tego konkretnego zaktualizowanego pliku konfiguracyjnego, lub zostaniesz poproszony o obsługę sytuacji.

Kiedy ta sama zmienna środowiskowa jest ustawiona zarówno w /etc/profilejednym, jak i w jednym lub większej liczbie plików /etc/profile.d, co jest wykonywane jako ostatnie? Zależy to od tego, czy polecenia w /etc/profiletym zestawie pojawiają się przed, czy po źródłach plików profile.d(według kodu, który cytowałem powyżej). Polecenia w /etc/profilesą wykonywane w kolejności, w jakiej się pojawiają.

/etc/profilejest skryptem powłoki, a jego składnia nie jest taka sama jak w przypadku plików konfiguracyjnych PAM omówionych powyżej . Jego składnia jest taka sama jak składnia ~/.profilepliku na użytkownika (patrz poniżej).

Jeśli musisz napisać kod, który decyduje o tym, czy dodać konkretny katalog PATH(i zrobić to dla wszystkich użytkowników), nie będziesz w stanie tego użyć /etc/environmentani /etc/security/pam_env.confzrobić. Jest to być może główna sytuacja, w której lepiej jest użyć /etc/profilelub /etc/profile.d/zamiast tego.

5. Dla jednego użytkownika: .bash_profilew katalogu osobistym użytkownika

Jeśli użytkownik ma ~/.bash_profile, bash używa go zamiast ~/.profilelub ~/.bash_login(patrz poniżej). Zwykle nie powinieneś mieć .bash_profilew swoim katalogu domowym.

Jeśli to zrobisz, zwykle powinno zawierać polecenie do źródła ~/.profile(np . "$HOME/.profile".). W przeciwnym razie zawartość .profilepliku na użytkownika w ogóle nie zostanie uruchomiona.

6. Dla jednego użytkownika: .bash_loginw katalogu osobistym użytkownika

Jeśli użytkownik tak ~/.bash_login, bash używa go zamiast ~/.profile(patrz poniżej), chyba że ~/.bash_profileistnieje, w którym to przypadku żaden z pozostałych nie zostanie użyty, chyba że pochodzi z `~ / .bash_login.

Tak jak w przypadku .bash_profile, zwykle nie powinieneś mieć .bash_loginpliku w swoim katalogu domowym.

7. Dla jednego użytkownika: .profilew katalogu osobistym użytkownika.

Gdy powłoka w stylu Bourne'a jest uruchamiana jako powłoka logowania, uruchamia polecenia w /etc/profile(co zwykle obejmuje polecenia, które powodują uruchomienie poleceń w plikach /etc/profile.d/- patrz wyżej). Następnie uruchamia polecenia w .profilekatalogu osobistym użytkownika. Ten plik jest osobny dla każdego użytkownika. (Bash faktycznie działa .bash_profilelub .bash_loginzamiast niego, jeśli istnieją - ale dla użytkowników systemu Ubuntu te pliki rzadko powinny istnieć. W celu uzyskania szczegółowych informacji patrz powyżej i Pliki startowe 6.2 Bash w instrukcji Bash .)

~/.profilejest zatem głównym miejscem, w którym użytkownik może umieszczać polecenia uruchamiane podczas logowania. Jest to tradycyjne miejsce do ustawienia PATH, ale ponieważ Ubuntu ma moduł pam_env i obsługuje ~/.pam_environment, powinieneś rozważyć jego użycie.

Tak jak w przypadku /etc/profilenie wszystkich menedżerów wyświetlania uruchamiających ten plik w celu logowania graficznego, choć większość tak robi. Jest to powód, aby wolą ~/.pam_environmentdo ustawiania zmiennych środowiskowych (podobnie jak można woleć /etc/environmentdo /etc/profile).

Można rozwinąć zmiennych środowiskowych, w tym PATHsiebie, po ustawieniu PATHw .pam_environment(patrz wyżej). Jeśli jednak musisz ustawić PATHbardziej wyrafinowany sposób, być może będziesz musiał użyć swojego .profile. W szczególności, jeśli chcesz sprawdzić, czy katalog istnieje za każdym razem, gdy użytkownik się loguje, i dodać go tylko, PATHjeśli tak, to nie będziesz mógł użyć swojego .pam_environmentpliku, aby dodać ten katalog do swojego PATH.

Na przykład domyślny .profileplik użytkownika na Ubuntu używany do zakończenia:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Zobacz Gunnar Hjalmarsson „s komentarz na odpowiedź bajt Komandorskim o szczegóły.

To sprawdza, czy masz binpodkatalog katalogu domowego. Jeśli tak, dodaje ten podkatalog na początku twojego PATH.

Ta lista pomija pewne możliwości.

Istnieją inne sposoby ustawiania zmiennych środowiskowych, gdy użytkownicy się logują, które w większym stopniu zależą od typu logowania. Na przykład, czasami możesz mieć zmienne środowiskowe ustawiane tylko dla logowania graficznego lub tylko dla logowania zdalnego opartego na SSH. Powyższa lista nie obejmuje takich przypadków.

Pominąłem kilka plików, w których ludzie czasami definiują zmienne środowiskowe, takie jak ~/.bashrci /etc/bash.bashrc, ponieważ nie są to ogólnie zalecane miejsca do ustawienia PATHi rzadko zdarza się, że należy ich używać do tego celu. Jeśli użyjesz tych plików do dodania katalogów PATH, to czasami będą one dodawane wiele razy i jest bardzo mylące podczas przeglądania $PATH. (W skrajnych przypadkach może to spowolnić, ale zwykle jest to kwestia utrzymania wszystkiego w czystości i zrozumiałości).

Ponieważ bashjest to domyślna powłoka logowania Ubuntu dla użytkowników i większość użytkowników używa jej lub innej powłoki kompatybilnej z POSIX, pominąłem informacje o tym, jak zmienne środowiskowe są ustawiane w innych powłokach innych niż Bourne, takich jak tcsh.

Eliah Kagan
źródło
1
[komentarz nr 1 z 2] Dziękujemy za ten obszerny opis! (Dokonałem drobnej edycji.) Mam jednak wątpliwości co do zalecanych sposobów. Kilka lat temu EnvironmentVariables wspomniał /etc/environment/ ~/.pam_environmenta do zalecanych plików. Po konsultacji z programistami zmieniłem go, aby był neutralny między PAM i /etc/profile.d/*.sh/ ~/.profilei nadal mam tendencję do patrzenia na to w ten sposób.
Gunnar Hjalmarsson
1
[komentarz nr 2 z 2] Wspomniał pan o kilku argumentach na korzyść PAM. Ważnymi argumentami na korzyść /etc/profile.d/*.sh/ ~/.profilesą to, że składnia jest prostsza i że lightdm / gdm wybaczają w przypadku błędów (nawet błędy składniowe nie uniemożliwiają zalogowania się, ale po prostu powodują wyświetlanie komunikatów ostrzegawczych).
Gunnar Hjalmarsson
Kiedy mówisz pam_env.so, miałeś na myśli pam_env.conf?
Johan Boulé
@ JohanBoulé Tak, miałem na myśli pam_env.conf. Dzięki! Zredagowałem to, aby to naprawić.
Eliah Kagan
3

Plik środowiskowy / etc / nie jest plikiem skryptu, którego nie można użyć do eksportowania i nie obsługuje on rozszerzania zmiennych typu $ HOME, tylko simplevariable = pary wartości. Aby więc użyć tego pliku, musisz po prostu dołączyć swoją ścieżkę do istniejącej definicji, przeznaczonej specjalnie dla ogólnosystemowych ustawień zmiennych środowiskowych. jeden na linię. W szczególności ten plik przechowuje ustawienia regionalne i ustawienia ścieżki w całym systemie.

~ / .profile - Plik ten jest wykonywany za każdym razem, gdy wykonywana jest powłoka bash, jest zwykle zalecana dla zmiennych środowiskowych, jednak ma tę wadę, że wywoływana jest tylko przez powłoki logowania, więc aby uzyskać efekt, będziesz potrzebować aby się wylogować i zalogować - a przynajmniej uruchomić nową powłokę logowania.

eGhoul
źródło
1

Preferowane miejsce do ustawiania zmiennych środowiskowych zależy od kilku rzeczy:

  1. Czy tylko ty używasz komputera:
    • W takim przypadku najlepszym miejscem do ustawienia jest to, że /etc/environmentnie ma niebezpieczeństwa nieupoważnionego dostępu.
  2. Jeśli z systemu korzysta wielu
    • Gdyby wszyscy mieli dostęp do zmiennych, to lokalizacja byłaby /etc/environment, ale
    • jeśli poszczególni użytkownicy powinni mieć do nich dostęp, to każdy powinien ustawić swoje dane~/.profile dotyczące każdego użytkownika systemu, ponieważ znajduje się on w katalogu osobistym każdego użytkownika.

System odczyta /etc/environmentprzed odczytem ~/.profile. Nie dochodzi do konkatenacji i podobnie jak Alex P powiedział, że ostatnie przypisanie do ścieżki ma pierwszeństwo.

Aby uzyskać bardziej szczegółowe informacje na temat czynników, które określają, w jaki sposób ~/.profilei /etc/environmentgrać z innymi takimi lokalizacjami, przejdź tutaj i tutaj , ponieważ czynniki te będą miały wpływ na sposób korzystania z tych lokalizacji.

George Udosen
źródło