Me encanta zsh
, pero no estoy seguro de dónde colocar mi $PATH
y otras afirmaciones variables. Encuentro que están dispersos entre los archivos .zshrc
.zprofile
.bashrc
.bash_profile
, y algunas 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 debería colocar exactamente mi rvm
, python
, node
etc adiciones a mi $PATH
?
¿Hay un archivo específico que debería estar usando (es decir, .zshenv
que existe not actualmente existe en mi instalación), uno de los que estoy usando actualmente, o incluso importa?
tl; versión de dr: use ~/.zshrc
Y lee la página del manual para entender las diferencias entre:
~/.zshrc
,~/.zshenv
y~/.zprofile
.
En mi comentario adjunto a la respuesta kev dio , 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
may se debe a zsh
. Sin embargo,, esto solo ocurre si zsh
es "invocado como sh
o ksh
"; en estos modos de compatibilidad:
No se ejecutan los scripts habituales de inicio/apagado de zsh. Iniciar sesión en 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 los scripts 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 una ruta de acceso. [ man zshall, "Compatibilidad" ].
El enlace ArchWiki ZSH dice:
Al iniciar sesión, Zsh obtiene los siguientes archivos en este orden:
/etc/perfil
Este archivo es obtenido por todos los shells compatibles con Bourne al iniciar sesión
Esto implica que /etc/profile
es leer siempre por zsh
al iniciar sesión: no tengo ninguna experiencia con el proyecto Arch Linux; la wiki puede ser correcta para esa distribución, pero es no generalmente correcta. La información esincorrecta en comparación con las páginas de manual de zsh, y no parece aplicarse a zsh en OS X (las rutas en $PATH
establecidas en /etc/profile
no llegan a mis sesiones de zsh).
¿dónde exactamente debo colocar mis adiciones de rvm, python, node, etc. en mi $ PATH?
En general, exportaría mi $PATH
desde ~/.zshrc
, pero vale la pena leer la página del manual zshall , específicamente la sección "ARRIBA/ARCHIVOS DE APAGADO": ~/.zshrc
se lee para interactivo shells, que puede o no adaptarse a sus necesidades: si desea el $PATH
para cada zsh
Shell invocado por usted (tanto interactive
y no, tanto login
y no, etc.), ~/.zshenv
es la mejor opción.
¿Debo usar un archivo específico (es decir, .zshenv que no existe actualmente en mi instalación), uno de los que estoy usando actualmente, o incluso importa?
Hay un montón de archivos que se leen al inicio (verifique las páginas man
vinculadas), y hay una razón para eso: cada archivo tiene su lugar particular (configuración para cada usuario, configuración para usuarios específicos, configuración para los formularios de inicio de sesión, configuración para cada Shell , etc).
No se preocupe por que ~/.zshenv
no existe; si lo necesita, hágalo y se leerá.
.bashrc
y .bash_profile
son noleído por zsh
, a menos que las obtenga de ~/.zshrc
o similar; la sintaxis entre bash
y zsh
es nosiempre compatible. Ambas .bashrc
y .bash_profile
están diseñadas para bash
no zsh
configuración.
Aquí están los documentos de las páginas del manual de zsh en la sección ARRANQUE/ARCHIVOS DE APAGADO.
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 aquí .
Tuve un problema similar (en bash el comando de la terminal funcionaba correctamente pero zsh mostró un error que no se encontró el comando)
simplemente pega lo que estuviste anteriormente pegando en ~/.bashrc en:
~/.zshrc