Do czego służy linia PATH eksportu w .bashrc?

9

Nie jestem zwolennikiem Linuksa i mam następujące wątpliwości po samouczku.

Muszę zmodyfikować bashrcplik. Jakie ustawienia są zawarte w tym pliku? Myślę, że coś dotyczyło środowiska powłoki bash, ale nie jestem tego taki pewien.

Muszę wstawić ten wiersz:

export PATH=$HOME/.local/bin:$HOME/.local/usr/bin:$PATH

Co dokładnie robi ta linia?

Myślę, że to exportoświadczenie służy do utworzenia nowej zmiennej udostępniającej ją dla innego programu.

Ale czym dokładnie jest ta linia? Czy PATHnazwa zmiennej, którą definiuję? Co to jest $HOME?

Co oznacza :symbol między PATH=$HOME/.local/bina $HOME/.local/usr/bini $PATHsekcji w poprzedniej wypowiedzi?

Co dokładnie oznacza to wyrażenie?

AndreaNobili
źródło
: Między pozycjami jest separatorem dla każdego segmentu. Bez niego twoja ścieżka byłaby jednym ciągłym biegiem i nie działałaby.
Terrance,
W Ubuntu tego rodzaju PATHmodyfikacje są już wykonywane w ~/.profilepliku, więc wykonywanie podobnych czynności jest trochę niespójne ~/.bashrc. Lepiej IMO zmodyfikować kod już w ~/.profilerazie potrzeby. Obecnie domyślny ~/.profileplik zawiera tę linię:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson
@GunnarHjalmarsson: Istnieją pewne sytuacje, które sprawiają, że .profile i .bashrc różnią się. Plik .profile jest analizowany przez powłoki logowania, a nie przez podpowłoki. Ponieważ jednak musisz się zalogować, aby uruchomić podpowłokę, jest to w porządku, ponieważ podpowłoki odziedziczą $ PATH. Plik .bashrc nie zostanie przeanalizowany przez powłokę logowania, ale zostanie przeanalizowany przez podpowłoki. Różnica pojawia się, gdy masz jakieś rzeczy, które nie są potomkami powłok logowania (może jakiś fantazyjny skrypt automatyzacji, który wywołuje inne skrypty, takie jak git commit hook) - wszystko w .profile nie zostanie odczytane, więc zostaną zignorowane
Slebetman
@slebetman: Prawo, aw przypadku komputera stacjonarnego nie ma innej różnicy, która nie wspomnieć: W przeciwieństwie ~/.bashrc, ~/.profilejest wchłaniany przez menedżera wyświetlania, więc tylko zmienne ustalane przez ~/.profiledostępne są podczas uruchamiania programów ze środowiska graficznego. Dzieje się to wcześnie, więc proces sesji powinien być w porządku.
Gunnar Hjalmarsson,

Odpowiedzi:

16

Podsumowując wszystko wymienione w tym pytaniu,

exportczęść

Te exportśrodki linia, która zmienną zadeklarować, że po to będzie dostępne dla procesów potomnych. Innymi słowy, procesy będą mogły uzyskać dostęp do zmiennej zadeklarowanej po exportsłowie kluczowym przez środowisko powłoki. Tak więc, jeśli zrobiłeś coś podobnego, export FOO="BAR"a następnie pozyskałeś zmiany w środowisku powłoki, możesz wpisać $FOOi pobrać BAR.

PATHczęść

Linia ścieżki jest taka, jak powiedziałeś: deklaruje zmienną nazwaną PATHdla środowiska powłoki. W środowisku bash PATHma specjalny cel polegający na określeniu, gdzie komputer szuka programów. Umożliwia to wpisywanie niestandardowych poleceń dla skryptów bez wpisywania pełnego katalogu. Zauważ, że PATH jest domyślnie zaznaczony do eksportu, więc ten wiersz nie musi być przepisywany. Ale to nie boli.

$HOMEW PATHzmiennej

Na początku ścieżki, która jest przypisana do PATHzmiennej, $HOMEjest deklarowana. Oznacza to, że komputer właściwie pobierze zapisaną wartość HOMEi skopiuje ją przed resztą wiersza podczas czytania.

:Pomiędzy obu ścieżek

Jest :to odpowiednik przecinka w zdaniach. Po prostu dzieli trzy katalogi. Bez tych trzech katalogów konsola nie rozpoznałaby otrzymanych poleceń. Te trzy miejsca to trzy katalogi, które są najczęściej używane do przechowywania skryptów / plików poleceń i dlatego powinny być dostępne dla terminala bez konieczności zapisywania pełnej ścieżki do pliku.

Dziwne
źródło
Świetna odpowiedź! „Linia eksportu oznacza, że ​​zmienna, którą zadeklarujesz po tym, będzie dostępna dla procesów potomnych”, czy rodzic dla tych procesów potomnych przetwarza terminal, z którego uruchomię polecenie?
vadasambar
5

PATHZmienna pozwala bash wiedzieć gdzie szukać programów wykonywalnych, więc jeśli masz jakiś inny skrypt lub plik wykonywalny w $HOME/.local/bin, modyfikacja PATHpozwoli wpisać i uruchomić ten plik podobnie jak zrobić z lslub df.

exportoznacza tylko udostępnienie tej PATHzmiennej także dla innych programów uruchamianych z bash.

Jeśli chodzi o : to, to tylko separator dla każdego katalogu. To jest to samo, co przecinek na liście słów, nic więcej.

Sergiy Kolodyazhnyy
źródło