131 votos

ZSH: .zprofile, .zshrc, .zlogin - ¿Qué va dónde?

Ahora que he actualizado a Catalina y estoy usando el nuevo shell ZSH, he notado que ~/.bash_profile ha sido sustituido por ~/.zprofile y desde que se instaló la integración del shell iTerm2, se añadió un ~/.zshrc archivo.

Mirando el Documentación de ZSH sobre los archivos de inicio/apagado hay una serie de archivos (ubicados en el directorio de inicio $HOME o ~/ ):

  • .zprofile (shell de inicio de sesión)
  • .zshenv (variables de entorno)
  • .zshrc (shell interactivo)
  • .zlogin (shell de inicio de sesión)
  • .zlogout (cuando la cáscara sale)

Lo que también es confuso es que ~/.zprofile y ~/.zlogin son ambos para las conchas de inicio de sesión, por lo que las cosas pueden ser confusas en cuanto a qué poner donde.

¿Qué archivos de inicio/apagado deben usarse al configurar el entorno del shell ZSH y cómo/qué deben configurarse?

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.

161voto

Douglas Puntos 10417

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

2 votos

Zsh es un intérprete de comandos UNIX (shell) utilizable como shell de inicio de sesión interactivo y como procesador de comandos script. De los shells estándar, zsh es el que más se parece a ksh pero incluye muchas mejoras. No proporciona compatibilidad con POSIX u otros shells en su modo de funcionamiento por defecto. Zsh tiene edición de línea de comandos, corrección ortográfica incorporada, finalización de comandos programable, funciones de shell (con autocarga), un mecanismo de historial y una serie de otras características.

0 votos

¿Qué versión de KSH utiliza un archivo llamado .login? ATT KSH se preocupa por /etc/profile, ~/.profile, y cualquier archivo al que haga referencia $ENV, o ~/.kshrc si no se establece $ENV. MKSH se preocupa por el perfil y lo sustituye por mkshrc. Si yo fuera tú, perdería las referencias a KSH y Bash, ninguna de ellas es relevante para el tema de tu FAQ.

0 votos

@Marc - se suponía que era CSH...perdón por la errata y sólo se mencionó una vez

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X