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?
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_profile
są a 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
.
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 .
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
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