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,~/.zshenvy~/.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 .