web-dev-qa-db-esp.com

¿Dónde colocar $ PATH aserciones variables en zsh?

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?

87
stefmikhail

tl; versión de dr: use ~/.zshrc

Y lee la página del manual para entender las diferencias entre:

~/.zshrc, ~/.zshenv y ~/.zprofile.


Respecto a mi comentario

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



Para abordar la pregunta:

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

118
simont

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

26
jor

Tuve un problema similar (en bash el comando de la terminal funcionaba correctamente pero zsh mostró un error que no se encontró el comando)

Solución:


simplemente pega lo que estuviste anteriormente pegando en ~/.bashrc en:

~/.zshrc
13
abe312