macos - ohmyzsh - zsh themes linux
¿Dónde colocar las aserciones variables de $ PATH en zsh? (3)
Me encanta zsh
, pero no estoy seguro de dónde colocar mi $PATH
y otras aserciones variables. Encuentro que están dispersos entre los archivos .zshrc
.zprofile
.bashrc
.bash_profile
, y a veces se duplican.
Me doy cuenta de que tener algo dentro de los archivos bash
no tiene mucho sentido ya que estoy usando zsh
, pero ¿ dónde exactamente debería colocar mis rvm
, python
, node
etc a mi $PATH
?
¿Existe un archivo específico que debería usar (es decir, .zshenv
que no existe actualmente en mi instalación), uno de los que estoy usando actualmente, o incluso importa?
Aquí están los documentos de las páginas man de zsh en la sección ARRANQUE / ARRANQUE DE ARCHIVOS.
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.
De esto podemos ver que los archivos de orden que se leen son:
/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
Puede obtener más información here .
Tuve un problema similar (en el comando de terminal bash estaba funcionando correctamente pero zsh mostró error de comando no encontrado)
Solución:
simplemente pega lo que estuviste pegando antes en ~ / .bashrc para:
~/.zshrc
tl; versión dr: use ~/.zshrc
Y lea la página del manual para entender las diferencias entre:
~/.zshrc
,~/.zshenv
y~/.zprofile
.
En cuanto a mi comentario
En mi comentario adjunto a la respuesta que dio kev , dije:
Esto parece ser incorrecto - / etc / profile no aparece en ninguna documentación de zsh que pueda encontrar.
Esto resulta ser parcialmente incorrecto: /etc/profile
puede ser originado por zsh
. Sin embargo , esto solo ocurre si zsh
se "invoca como sh
o ksh
"; en estos modos de compatibilidad:
Los scripts de inicio / apagado de zsh habituales no se ejecutan. Inicie sesión shells source / etc / profile seguido de $ HOME / .profile. Si la variable de entorno ENV se establece en la invocación, $ ENV se obtiene después de las secuencias de comandos de perfil. El valor de ENV está sujeto a la expansión de parámetros, la sustitución de comandos y la expansión aritmética antes de interpretarse como un nombre de ruta. [ man zshall, "Compatibilidad" ].
El enlace de ArchWiki ZSH dice:
Al iniciar sesión, Zsh obtiene los siguientes archivos en este orden:
/ etc / profile
Este archivo es originado por todos los shells compatibles con Bourne al iniciar sesión
Esto implica que /etc/profile
siempre es leído por zsh
al iniciar sesión - No tengo ninguna experiencia con el proyecto Arch Linux; el wiki puede ser correcto para esa distribución, pero generalmente no es correcto. La información es incorrecta en comparación con las páginas del manual zsh, y no parece aplicarse a zsh en OS X (las rutas en $PATH
establecidas en /etc/profile
no llegan a mis sesiones zsh).
Para abordar la pregunta:
¿Dónde exactamente debería colocar mis adiciones de rvm, python, node etc a mi $ PATH?
En general, exportaría mi $PATH
desde ~/.zshrc
, pero vale la pena leer la página man de zshall , específicamente la sección "ARCHIVOS ~/.zshrc
" - ~/.zshrc
se lee para shells interactivos , que pueden o pueden ser no se ajusta a sus necesidades: si desea $PATH
para cada shell zsh
invocada por usted (tanto interactive
como no, tanto para login
como para no, etc.), entonces ~/.zshenv
es una mejor opción.
¿Existe un archivo específico que debería usar (es decir, .zshenv, que no existe actualmente en mi instalación), uno de los que estoy usando actualmente, o incluso importa?
Hay una gran cantidad de archivos leídos al inicio (revise las páginas man
), y hay una razón para eso: cada archivo tiene su lugar particular (configuraciones para cada usuario, configuraciones para usuarios específicos, configuraciones para shell de inicio de sesión, configuraciones para cada shell , etc.)
No se preocupe si ~/.zshenv
no existe - si lo necesita, ~/.zshenv
y lo leerá.
.bashrc
y .bash_profile
no son leídos por zsh
, a menos que los fuente explícitamente desde ~/.zshrc
o similar; la sintaxis entre bash
y zsh
no siempre es compatible. Tanto .bashrc
como .bash_profile
están diseñados para configuraciones de bash
, no de zsh
.