Respuestas:
.profile
vs. .zprofile
Zsh se ejecuta ~/.zprofile
, no ~/.profile
, cuando se invoca como un shell de inicio de sesión. La razón es que zsh tiene suficientes incompatibilidades con shells estándar para romper los scripts.
Zsh se ejecuta ~/.profile
si se llama como sh
o ksh
. Pero si su objetivo es obtener un indicador de zsh cuando inicie sesión, no será de ayuda.
Puede hacer /bin/sh
su shell de inicio de sesión e incluirlo export SHELL=/bin/zsh
en su ~/.profile
. A continuación, cuando se abre un terminal, el terminal se lanzará zsh (a excepción de algunos emuladores de terminal no obedecen a la $SHELL
configuración). Pero aún tendrá sh
cuando inicie sesión a través de ssh. Esto se puede solucionar mediante la inclusión exec zsh
al final de ~/.profile
(esto reemplaza el shell en ejecución por zsh), pero debe tener cuidado solo para hacerlo para inicios de sesión interactivos y no cuando ~/.profile
se incluye desde otros scripts como el inicio de la sesión X (un buen test es el nombre del proceso padre obtenido por ps -o comm= $PPID
: si es sshd
o su
, entonces es seguro hacerlo exec
).
La solución más fácil para trabajar con zsh y ejecutar ~/.profile
es crear un ~/.zprofile
modo de emulación sh mientras se ejecuta ~/.profile
:
emulate sh
. ~/.profile
emulate zsh
Si tiene un zsh lo suficientemente reciente (en Ubuntu, eso significa que es lúcido, creo), puede simplificar esto emulate sh -c '. ~/.profile'
.
.zprofile
vs. .zshrc
El archivo ~/.profile
se carga mediante shells de inicio de sesión . El shell de inicio de sesión es el primer proceso que se inicia cuando inicia sesión en modo texto, por ejemplo, en una consola de texto o mediante ssh. De manera predeterminada, en la mayoría de las máquinas Linux, el shell de inicio de sesión es bash, pero puede cambiarlo con el chsh
comando o mediante alguna otra herramienta, como la "Configuración de usuario" en Ubuntu. Cuando se trata de un shell de inicio de sesión, bash lee ~/.bash_profile
si existe y ~/.profile
, mientras que zsh solo lee ~/.zprofile
(porque su sintaxis no es completamente compatible con un sh tradicional). En la mayoría de las configuraciones, ~/.profile
también se carga con los scripts de inicio de sesión X cuando inicia sesión en un administrador de pantalla gráfica.
Cuando inicia un emulador de terminal y obtiene un indicador de shell, o cuando inicia un shell explícitamente, obtiene un shell que no es un shell de inicio de sesión. Como ~/.profile
(o ~/.zprofile
) es para comandos que desea ejecutar cuando inicia sesión, un shell que no inicia sesión no lee este archivo. En cambio, cuando inicia un zsh interactivo, se lee ~/.zshrc
. (Zsh lee ~/.zshrc
en todos los shells interactivos, si son shells de inicio de sesión no lo son; bash, curiosamente, nunca lee ~/.bashrc
en shells de inicio de sesión).
Por lo general, ~/.profile
contiene definiciones de variables de entorno y puede iniciar algunos programas que desea ejecutar una vez al iniciar sesión o para toda la sesión; ~/.zshrc
contiene cosas que deben hacerse para cada instancia de shell, como alias y definiciones de funciones, configuraciones de opciones de shell, configuraciones de finalización, configuraciones de solicitud, enlaces de teclas, etc.
~/.profile
no está cargado por zsh
al iniciar la sesión.zsh
se carga ~/.zprofile
al iniciar sesión.zsh
se carga ~/.zshrc
al iniciar una nueva sesión de terminal.¿Necesitas más información? ¡Mira la excelente respuesta de Gilles!
Además de la respuesta de Gilles, con una versión razonablemente reciente de zsh puede hacer esto:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... que generará el archivo .profile con el modo sh de zsh en efecto. Y solo está activo durante la fuente. Por lo tanto, no tiene que guardar el estado de la opción actual para volver a reproducirlo después del abastecimiento.
Tengo .zprofile
compatibilidad con .profile
(contiene solo cambios de RUTA), por lo tanto solo necesito:
ln -s .profile .zprofile
El zsh documentación que tengo a mano sólo menciona /etc/profile
y ~/.profile
para shells de entrada en sh / ksh modo de compatibilidad.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
El shell de inicio de sesión en modo nativo (argv [0] comienza con -
) no se usa ~/.profile
( ~/.zprofile
aunque lo hará ):
% zsh -c 'exec -a -zsh zsh' </dev/null
(ninguna salida)
sh / ksh de compatibilidad conchas modo de inicio de sesión utiliza .profile:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...