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

Kocham zsh, ale nie jestem pewien, gdzie umieścić moje $PATH i inne twierdzenia zmiennych? Znajduję, że są one rozrzucone między plikami .zshrc .zprofile .bashrc .bash_profile, i czasami podwoiła się.

Zdaję sobie sprawę, że posiadanie czegokolwiek wewnątrz bash plików nie ma większego sensu, ponieważ używam zsh, ale gdzie dokładnie powinienem umieścić swój rvm, python, node etc dodatki do mojego $PATH?

Czy Jest jakiś konkretny plik, którego powinienem używać (np. {[12] } który Nie obecnie istnieje w mojej instalacji), jeden z tych, z których obecnie korzystam, czy to w ogóle ma znaczenie?

Author: stefmikhail, 2012-05-13

3 answers

Tl; dr version: use ~/.zshrc

I przeczytaj stronę podręcznika , aby zrozumieć różnice między:

~/.zshrc, ~/.zshenv i ~/.zprofile.


Odnośnie mojego komentarza

W komentarzu dołączonym do odpowiedzi kev dał , powiedziałem:

To wydaje się być błędne - /etc / profile nie jest wymienione w żadnej dokumentacji zsh, którą mogę znaleźć.

To okazuje się być częściowo niepoprawne: /etc/profile may be źródło: zsh. W przeciwieństwie do innych języków, w których nie można używać języka angielskiego, nie można używać języka angielskiego.]}

Zwykłe Skrypty uruchamiania/zamykania zsh nie są wykonywane. Źródło / etc / profile, po którym następuje $HOME/.profil. Jeśli zmienna środowiskowa ENV jest ustawiona przy wywołaniu, $ENV jest pozyskiwana po skryptach profilowych. Wartość ENV jest poddawana rozszerzaniu parametrów, zastępowaniu poleceń i rozszerzaniu arytmetycznemu, zanim zostanie zinterpretowana jako pathname. [man zshall, "kompatybilność" ].

ArchWiki ZSH link says:

Przy logowaniu Zsh pobiera następujące pliki w tej kolejności:
/etc / profile
Ten plik jest pozyskiwany przez wszystkie powłoki kompatybilne z Bourne ' em po zalogowaniu]}

To implikuje, że /etc/profile jest zawsze czytam przez zsh przy logowaniu - nie mam doświadczenia z projektem Arch Linux; wiki może być poprawna dla tej dystrybucji, ale jest Nie ogólnie poprawne. Informacja jest nieprawidłowa w porównaniu ze stronami podręcznika zsh i wydaje się, że nie dotyczy zsh na OS X (ścieżki w $PATH ustawione w /etc/profile nie trafiają do moich sesji zsh).



Aby odpowiedzieć na pytanie:

Gdzie dokładnie powinienem umieścić moje dodatki rvm, python, node itp do mojej $PATH?

Generalnie wyeksportowałbym swój $PATH z ~/.zshrc, ale warto przeczytać zshall strona podręcznika, w szczególności sekcja "Uruchamianie/zamykanie plików" - ~/.zshrc jest odczytywana dla interaktywnych powłok , które mogą, ale nie muszą odpowiadać Twoim potrzebom - jeśli chcesz $PATH dla każdej powłoki zsh wywoływanej przez Ciebie (zarówno interactive, jak i nie, ZARÓWNO login i nie, itd.), to ~/.zshenv jest lepszą opcją.

Czy jest jakiś konkretny plik, którego powinienem używać (np.zshenv, który obecnie nie istnieje w mojej instalacji), jeden z tych, z których obecnie korzystam, czy nawet Materia?

Jest kilka plików odczytywanych podczas uruchamiania (sprawdź połączone strony man) i nie bez powodu-każdy plik ma swoje szczególne miejsce (ustawienia dla każdego użytkownika, ustawienia dla konkretnego użytkownika, ustawienia dla powłok logowania, ustawienia dla każdej powłoki, itp.).
Nie martw się o ~/.zshenv nieistniejące - jeśli potrzebujesz, zrób to, a zostanie przeczytane.

.bashrc i .bash_profilea nie czytane przez zsh, chyba że jawnie źródlisz je z ~/.zshrc lub podobnego; składnia pomiędzy bash i zsh jest Nie zawsze zgodna. Zarówno .bashrc, jak i .bash_profile są przeznaczone do ustawień bash, a nie do ustawień zsh.

 109
Author: simont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 13:13:02

Oto dokumenty ze stron podręcznika zsh w sekcji uruchamianie / zamykanie plików.

   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 widzimy, że odczytywane są pliki kolejności:

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

 21
Author: jor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-02 13:01:19

Miałem podobny problem (w bash terminal command działało poprawnie ale zsh pokazało polecenie not found błąd)

Rozwiązanie:


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

~/.zshrc
 12
Author: abe312,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-22 04:36:11