Gdzie jest ustawiona ogólnosystemowa zmienna $ PATH?

10

Używam Ubuntu Desktop 14.04 i jako taki używam powłoki niezalogowanej. Kiedy otwieram terminal GUI, najpierw sesje powłoki niezalogowane czytają następujące pliki startowe:

/etc/bash.bashrc
~/.bashrc

Powłoki bez logowania dziedziczą środowisko z procesu nadrzędnego, który jest powłoką logowania, więc sesja odczytuje również następujące pliki startowe:

/etc/profile
~/.bash_profile

Jednak nie mogę znaleźć $PATHdla całego systemu ścieżek podoba /bin, /sbin, /usr/bin, /usr/sbin, mieszczący się w żadnej z tych plików. Gdzie jest $PATHzestaw tych katalogów?

Donato
źródło

Odpowiedzi:

16

(Domyślny) dla całego systemu PATHjest ustawiony w /etc/environmentpliku.

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

Jest to w zasadzie miejsce do zapisywania globalnych zmiennych środowiskowych.

heemayl
źródło
+1, ale czy wiesz, czy $PATHjest dziedziczony przez nadrzędną powłokę logowania, czy też jest przeładowywany przez każdą bashinstancję?
Kos
@kos Wszystkie procesy potomne dziedziczą środowisko z powłoki nadrzędnej, chyba że oczywiście są uruchamiane w zmodyfikowanym środowisku.
heemayl
Zauważam, że powłoka nie wydaje się rozszerzać $HOMEzmiennej. Na przykład dodanie $HOME/.composer/vendor/bindo PATHin /etc/environmentnie pozwala na uruchomienie plików binarnych w tym katalogu bez prefiksu ścieżki. Korzystanie ~/.composer/vendor/binrównież nie działa. Uważam za konieczne dodanie ścieżki bezwzględnej, np /home/vagrant/.composer/vendor/bin. : . Wydaje się to powiązane (choć nie wyjaśnia tego zachowania): askubuntu.com/questions/402353/…
Ben Johnson
2
@BenJohnson To po prostu dlatego, że /etc/environment(i ~/.pam/environment) jest odczytywany przez pam_envmoduł PAM, a nie powłokę lub cokolwiek innego, co rozumie zmienne powłoki / środowiska; to samo dotyczy ~ekspansji. Musisz więc użyć absolutnej ścieżki.
heemayl