Gdzie umieścić asercje zmiennej $ PATH w zsh?


111

Uwielbiam zsh, ale nie jestem pewien, gdzie umieścić moje $PATHi inne zmienne asercje? Uważam, że są one rozproszone między plikami .zshrc .zprofile .bashrc .bash_profile, a czasami podwajane.

Zdaję sobie sprawę, że o cokolwiek wewnątrz bashplików nie ma większego sensu, skoro używam zsh, ale gdzie dokładnie powinienem być umieszczenie moich rvm, python, nodeitp uzupełnień moim $PATH?

Czy jest jakiś konkretny plik, którego powinienem używać (tj. .zshenvKtórego obecnie nie ma w mojej instalacji), jeden z tych, których aktualnie używam, czy w ogóle ma to znaczenie?

Odpowiedzi:


148

tl; wersja dr: użyj ~/.zshrc

I przeczytać stronę man , aby zrozumieć różnice pomiędzy:

~/.zshrc, ~/.zshenvi ~/.zprofile.


Odnośnie mojego komentarza

W komentarzu dołączonym do odpowiedzi, której udzielił Kev , powiedziałem:

Wygląda na to, że jest to nieprawidłowe - pliku / etc / profile nie ma w żadnej dokumentacji zsh, którą mogę znaleźć.

Okazuje się, że jest to częściowo błędne: /etc/profile może pochodzić z zsh. Jednak dzieje się tak tylko wtedy, gdy zshjest „wywołane jako shlub ksh”; w tych trybach zgodności:

Zwykłe skrypty uruchamiania / zamykania zsh nie są wykonywane. Powłoki logowania source / etc / profile, a następnie $ HOME / .profile. Jeśli zmienna środowiskowa ENV jest ustawiona przy wywołaniu, kod $ ENV jest pobierany po skryptach profilu. Wartość ENV podlega interpretacji parametrów, podstawianiu poleceń i interpretacji wyrażeń arytmetycznych, zanim zostanie zinterpretowana jako nazwa ścieżki. [ man zshall, "Compatibility" ].

Link ArchWiki ZSH mówi:

Podczas logowania Zsh pobiera następujące pliki w następującej kolejności:
/ etc / profile
Ten plik jest pobierany przez wszystkie powłoki kompatybilne z Bourne po zalogowaniu

Ten implys że /etc/profilejest zawsze odczytywane przez zshprzy logowaniu - Nie mam żadnego doświadczenia z projektu Arch Linux; wiki może być poprawne dla tej dystrybucji, ale generalnie nie jest poprawne. Informacje są niepoprawne w porównaniu ze stronami podręcznika zsh i wydają się nie mieć zastosowania do zsh w systemie OS X (ścieżki w $PATHustawieniu /etc/profilenie prowadzą do moich sesji zsh).



Aby odpowiedzieć na pytanie:

gdzie dokładnie powinienem umieścić moje dodatki rvm, python, node itp. w mojej $ PATH?

Generalnie chciałbym wyeksportować $PATHz ~/.zshrc, ale warto o odczyt z zshall strony człowieka, zwłaszcza w sekcji „uruchamianie / zamykanie FILES” - ~/.zshrcto lektura obowiązkowa dla interaktywnych muszli, które mogą lub nie mogą własnych potrzeb - jeśli chcesz, aby $PATHna każda zshpowłoka wywołana przez Ciebie (zarówno interactivei nie, jak logini nie, itd.) ~/.zshenvjest lepszym rozwiązaniem.

Czy istnieje konkretny plik, którego powinienem używać (np. .Zshenv, którego obecnie nie ma w mojej instalacji), jeden z tych, których obecnie używam, czy w ogóle ma to znaczenie?

Jest kilka plików odczytywanych podczas uruchamiania (sprawdź powiązane manstrony) i jest ku temu powód - każdy plik ma swoje określone miejsce (ustawienia dla każdego użytkownika, ustawienia dla użytkownika, ustawienia powłok logowania, ustawienia dla każdej powłoki, itp).
Nie martw się, że ~/.zshenvnie istnieje - jeśli tego potrzebujesz, zrób to, a zostanie przeczytane.

.bashrci nie.bash_profile są czytane przez użytkownika , chyba że wyraźnie je pozyskujesz z lub w podobny sposób; składnia pomiędzy i to nie zawsze zgodne. Obie i są przeznaczone do ustawień, a nie ustawień.zsh~/.zshrcbashzsh.bashrc.bash_profilebashzsh


3
Dzięki za więcej niż dokładną odpowiedź simont. Dziwne, że można powiedzieć .bashrci .bash_profilenie są odczytywane przez zshjak ja obecnie mam mój rvmdodatek do $PATHw .bashrc, a mój pythondodatek w .bash_profile, i oba są dodawane dobrze. W każdym razie zamierzam przenieść wszystkie moje $PATHeksporty do, ~/.zshrcponieważ cała moja inna zshkonfiguracja jest tam przechowywana. Muszę przyznać, że nie jestem zbyt zaznajomiony z różnymi typami muszli. Po przeczytaniu linków, które zamieściłeś, domyślam się, że używam interaktywnej powłoki, ale dla pewności przeczytam dalej ... Jeszcze raz dziękuję!
— stefmikhail

30

Oto dokumentacja ze stron man zsh w sekcji STARTUP / SHUTDOWN FILES.

   Commands  are  first  read from /etc/zshenv this cannot be overridden.
   Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
   former  affects all startup files, while the second only affects global
   startup files (those shown here with an path starting with  a  /).   If
   one  of  the  options  is  unset  at  any point, any subsequent startup
   file(s) of the corresponding type will not be read.  It is also  possi-
   ble  for  a  file  in  $ZDOTDIR  to  re-enable GLOBAL_RCS. Both RCS and
   GLOBAL_RCS are set by default.

   Commands are then read from $ZDOTDIR/.zshenv.  If the shell is a  login
   shell,  commands  are  read from /etc/zprofile and then $ZDOTDIR/.zpro-
   file.  Then, if the  shell  is  interactive,  commands  are  read  from
   /etc/zshrc  and then $ZDOTDIR/.zshrc.  Finally, if the shell is a login
   shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.

Z tego widać, że odczytywane są pliki zamówień:

/etc/zshenv    # Read for every shell
~/.zshenv      # Read for every shell except ones started with -f
/etc/zprofile  # Global config for login shells, read before zshrc
~/.zprofile    # User config for login shells
/etc/zshrc     # Global config for interactive shells
~/.zshrc       # User config for interactive shells
/etc/zlogin    # Global config for login shells, read after zshrc
~/.zlogin      # User config for login shells
~/.zlogout     # User config for login shells, read upon logout
/etc/zlogout   # Global config for login shells, read after user logout file

Więcej informacji znajdziesz tutaj .


18

Miałem podobny problem (w poleceniu terminalu bash działało poprawnie, ale zsh pokazał błąd nie znaleziono polecenia)

Rozwiązanie:


po prostu wklej to, co wcześniej wklejałeś w ~ / .bashrc do:

~/.zshrc
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.