zsh config - eksportować czy nie eksportować?


23

Podczas ustawiania zmiennych w moim ~/.zshrcmogę albo użyćexport

export PATH=/some/path

albo nie

PATH=/some/path

Czym się różnią i których powinienem użyć?


Zmienne środowiskowe, które są również używane przez nieinteraktywne powłoki (powiedzmy napisany przez ciebie skrypt powłoki) powinny się znaleźć .zshenv.
— Francisco

Czy są również ~/.zshenvpozyskiwane z powłok logowania? Należy PATHtam zdefiniować?
— jordelver

1
PATHjest prawdopodobnie najlepszym przykładem zmiennej, którą należy zdefiniować wewnątrz ~/.zshenv, ten plik jest pobierany przez dowolną sesję zsh (chyba że użyjesz jakiejś opcji, aby ją wyłączyć). Sprawdź, man zshktóre pliki są pobierane i w jakiej kolejności.
— Francisco

Ok, dzięki @Francisco Przeczytam stronę podręcznika man.
— jordelver

Odpowiedzi:


21

Jeśli chcesz, aby programy działały z zsh, aby zobaczyć var, wyeksportuj go.
W przypadku ścieżki prawdopodobnie chcesz wyeksportować.
Zamiast tego export PATH=/some/pathprawdopodobnie chcesz export PATH="$PATH:/some/path", chyba że zamierzasz całkowicie wyczyścić wstępnie ustawioną ścieżkę systemu.


To jest świetne, dziękuję. Teraz użyję eksportu jako ogólnej zasady.
— jordelver

21

Demure już odpowiedział na twoje konkretne pytanie. Jest to jednak zshpytanie PATH. Oto kolejny punkt: oprócz zmiennej standardowej $PATHistnieje także $pathtablica. Tutaj widzisz różnicę (dwukropki czy nie ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Oba warianty są automatycznie synchronizowane. Jaka jest więc korzyść z używania tablicy?

  • Tę ostatnią można zadeklarować za pomocą, typeset -U pathaby „zachować tylko pierwsze wystąpienie każdej zduplikowanej wartości” (z man zshbuiltins). Oznacza to, że utrzymuje twoją ścieżkę w czystości, nawet jeśli sukcesywnie pozyskujesz ją ~/.zshrc(ponieważ ją zmieniłeś lub cokolwiek innego) i nie zaśmiecasz jej wciąż tymi samymi wartościami.
  • Możesz użyć, path+=(/new/path)aby dodać nowy katalog do ŚCIEŻKI. Aby usunąć element, musisz użyć niektórych sztuczek, patrz np. Https://stackoverflow.com/q/3435355/2037712 lub http://www.zsh.org/mla/users//2005/msg01132.html
  • Za pomocą można łatwo zapętlić elementy w ścieżce for i ($path) { print $i # or do something else }

Na koniec fragment mojej konfiguracji:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

Dziękuję, to było kolejne pytanie. Spojrzę na zarządzanie moją ścieżką za pomocą pathzamiast PATH.
— jordelver

1
Cieszę się, że już się obawiałem, że jestem OT. Btw. kolejna zaleta, o której zapomniałem: możesz łatwo zapętlić elementy for i ($path) { print $i # or do something else }.
— mpy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.