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 ...):
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.
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 }.
.zshenv
.~/.zshenv
pozyskiwane z powłok logowania? NależyPATH
tam zdefiniować?PATH
jest 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 zsh
które pliki są pobierane i w jakiej kolejności.Odpowiedzi:
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/path
prawdopodobnie chceszexport PATH="$PATH:/some/path"
, chyba że zamierzasz całkowicie wyczyścić wstępnie ustawioną ścieżkę systemu.źródło
Demure już odpowiedział na twoje konkretne pytanie. Jest to jednak
zsh
pytaniePATH
. Oto kolejny punkt: oprócz zmiennej standardowej$PATH
istnieje także$path
tablica. Tutaj widzisz różnicę (dwukropki czy nie ...):Oba warianty są automatycznie synchronizowane. Jaka jest więc korzyść z używania tablicy?
typeset -U path
aby „zachować tylko pierwsze wystąpienie każdej zduplikowanej wartości” (zman 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.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.htmlfor i ($path) { print $i # or do something else }
Na koniec fragment mojej konfiguracji:
źródło
path
zamiastPATH
.for i ($path) { print $i # or do something else }
.