Este es un intento de escribir un QA canónico para este tema, según el Meta post: ¿Dónde se almacena la lista de preguntas canónicas para Ask Different? Espero que se edite periódicamente con el objetivo de convertirse en una fuente de información completa.
Qué debe usarse en ZSH en un Mac
He publicado una pregunta de alcance más limitado en Unix y Linux y obtuve algunas aclaraciones sobre cómo "funcionan" estos archivos. Aquí está el resumen de esa respuesta y lo que he aprendido en mi investigación en cuanto a qué, en mi opinión debe utilizarse en un entorno ZSH en un Mac.
-
.zprofile
.zlogin
y .zpofile
son básicamente la misma cosa - establecen el entorno para las conchas de inicio de sesión simplemente se cargan en momentos diferentes (véase más abajo). .zprofile
se basa en el Bash's .bash_profile
mientras que .zlogin
es una derivada de KSH .login
. Dado que Bash era el shell por defecto para todo hasta Mojave, siga con .zprofile
.
-
.zshrc
Esto establece el entorno para las conchas interactivas . Esto se carga después de .zprofile
. Se trata de un lugar en el que normalmente se fijan parámetros del tipo "configúralo y olvídate" como $PATH
, $PROMPT
, los alias y las funciones que le gustaría tener en ambos inicios de sesión y conchas interactivas.
-
.zshenv (opcional)
Esto se lee primero y se lee siempre. Aquí es donde se establecen las variables de entorno. Digo que esto es opcional porque está orientado más hacia usuarios avanzados donde tener sus variables $PATH, $PAGER, o $EDITOR puede ser importante para cosas como scripts que son llamados por launchd
. Estos se ejecutan bajo un shell no interactivo por lo que cualquier cosa en .zprofile
o .zshrc
no se cargará. Personalmente, no uso este porque establezco la variable PATH en mi script mismo para asegurar la portabilidad.
-
.zlogout (opcional)
¡Pero muy útil! Se lee cuando se cierra la sesión y es muy bueno para limpiar las cosas cuando te vas (como restablecer el título de la ventana de la terminal)
Para una excelente y profunda explicación de lo que hacen estos archivos, véase Qué debe/no debe ir en .zshenv, .zshrc, .zlogin, .zprofile, en Unix/Linx.
Algunas advertencias
Apple hace las cosas de manera un poco diferente, así que es mejor estar al tanto. Específicamente, El terminal abre inicialmente tanto un inicio de sesión y shell interactivo aunque no se autentique (introduzca las credenciales de acceso). Sin embargo, los siguientes shells que se abran serán sólo interactivos.
Puedes probarlo poniendo un alias o estableciendo una variable en .zprofile
y luego abrir el Terminal y ver si esa variable/alias existe. A continuación, abra otro shell (escriba zsh
); esa variable ya no será accesible.
Las sesiones SSH son de inicio de sesión e interactivas, por lo que se comportarán igual que la sesión inicial de Terminal y leerán tanto .zprofile
y .zshrc
Orden de operaciones
Este es el orden en que se leen estos archivos. Tenga en cuenta que primero lee el archivo de todo el sistema (es decir /etc/zshenv
) y luego del que se encuentra en su directorio de origen (`~/.zshenv) a medida que avanza en el orden.
.zshenv
→ .zprofile
→ .zshrc
→ .zlogin
→ .zlogout
1 votos
La documentación de ZSH que mencionas en tu pregunta, explica detalladamente en qué secuencia busca zsh esos archivos. Todos ellos son opcionales, y tú eres el dueño de tu cuenta: No hay ninguna ley que te diga qué comando tienes que poner en cada archivo. Sólo ponlos donde sea que hagan lo que quieres, dado el tipo de shell que estás usando (login/no-login; interactivo/no-interactivo). No olvides que las variables de entorno son heredadas por sus procesos hijos.