Hay un estándar definido en el manual de zsh https://zsh.sourceforge.io/Doc/Release/Files.html#Startup_002fShutdown-Files
Desafortunadamente Apple no los leyó completamente y por eso para macOS hay una ligera diferencia. O intentaron proporcionar la adición al path solo para sesiones de inicio de sesión pero su solución path_helper desordena lo que el usuario establece en .zshenv.
El archivo en el que están las variables difiere ya que los archivos se leen de manera diferente dependiendo de cómo se inicia el shell.
Entonces, dados los archivos que mencionas
.profile
Nada que ver con zsh - es el archivo que lee sh. (bash lo leerá como un shell de inicio de sesión si no hay .bash_profile
.zshenv
Este archivo es leído por todos los shells zsh cuando se inician. Así que cualquier variable de entorno común debería estar aquí. Esto incluye $PATH si sigues el manual de zsh; sin embargo, Apple no leyó eso y en /etc/zshrc que se lee después de eso añaden y reordenan el $PATH
Este archivo es leído por scripts.
.zshenv
se origina en todas las invocaciones del shell, a menos que se establezca la opción -f. Debería contener comandos para establecer la ruta de búsqueda de comandos, además de otras variables de entorno importantes. .zshenv
no debería contener comandos que produzcan salida o asuman que el shell está conectado a una tty.
.zprofile y .zlogin
Llamado al iniciar sesión - esto es en cada Terminal en macOS pero solo una vez en otros Unixes
.zlogin
se origina en shells de inicio de sesión. Debería contener comandos que deberían ejecutarse solo en shells de inicio de sesión. .zlogout
se origina cuando los shells de inicio de sesión se cierran. .zprofile
es similar a .zlogin
, excepto que se origina antes de .zshrc
. .zprofile
está pensado como una alternativa a .zlogin
para los aficionados a ksh; no se pretende que ambos se usen juntos, aunque ciertamente esto podría hacerse si se desea.
.zlogin
no es el lugar para definiciones de alias, opciones, configuraciones de variables de entorno, etc.; como regla general, no debería cambiar el entorno del shell en absoluto. Más bien, debería utilizarse para establecer el tipo de terminal y ejecutar una serie de comandos externos (fortune, msgs, etc).
.zshrc
Esto se lee en un shell interactivo es decir cuando ejecutas el shell para escribir cosas.
.zshrc
se origina en shells interactivos. Debería contener comandos para configurar alias, funciones, opciones, combinaciones de teclas, etc.
También en macOS este es el lugar más sencillo para alterar el $PATH para corregir el orden que Apple cambia con /usr/libexec/path_helper ya que tu cambio está en un solo lugar - sin embargo, si deseas ser completo puedes arreglar los cambios de path_helper en ~/.zlogin pero también entonces necesitarías añadir tus cambios en $PATH en otro archivo para ejecuciones no interactivas también).
0 votos
La versión inicial de la respuesta que recibiste en realidad solo estaba expresando una opinión :-)
0 votos
No es necesario profundizar en tutoriales para esto: simplemente haz un
man zshall
y busca la sección etiquetada como ARCHIVOS DE INICIO/CIERRE. A partir de esto aprenderás qué archivos son procesados bajo qué circunstancias por zsh (ayuda hacer un diagrama de los diferentes casos en una hoja de papel), y luego verás dónde quieres colocar qué definiciones, para que se ajusten mejor. Mayormente, distinguirás 4 casos: shell de inicio no interactivo, shell no interactivo no de inicio, shell interactivo de inicio, shell interactivo no de inicio.