Acabo de instalar zsh en mi sistema Ubuntu. Parece que zsh no está ejecutando ~ / .profile en init. A mi entender, este debería ser un comportamiento automático. ¿Qué me estoy perdiendo?
.profile vs. .zprofileZsh 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 ~/.profilesi se llama como sho ksh. Pero si su objetivo es obtener un indicador de zsh cuando inicie sesión, no será de ayuda.
Puede hacer /bin/shsu shell de inicio de sesión e incluirlo export SHELL=/bin/zshen 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 $SHELLconfiguración). Pero aún tendrá shcuando inicie sesión a través de ssh. Esto se puede solucionar mediante la inclusión exec zshal 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 ~/.profilese 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 sshdo su, entonces es seguro hacerlo exec).
La solución más fácil para trabajar con zsh y ejecutar ~/.profilees crear un ~/.zprofilemodo 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. .zshrcEl archivo ~/.profilese 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 chshcomando 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_profilesi 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, ~/.profiletambié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 ~/.zshrcen todos los shells interactivos, si son shells de inicio de sesión no lo son; bash, curiosamente, nunca lee ~/.bashrcen shells de inicio de sesión).
Por lo general, ~/.profilecontiene 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; ~/.zshrccontiene 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.
Respuesta corta para personas impacientes:
~/.profileno está cargado porzshal iniciar la sesión.zshse carga~/.zprofileal iniciar sesión.zshse carga~/.zshrcal iniciar una nueva sesión de terminal.¿Necesitas más información? ¡Mira la excelente respuesta de Gilles!
fuente
Además de la respuesta de Gilles, con una versión razonablemente reciente de zsh puede hacer esto:
... 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.
fuente
Tengo
.zprofilecompatibilidad con.profile(contiene solo cambios de RUTA), por lo tanto solo necesito:fuente
El zsh documentación que tengo a mano sólo menciona
/etc/profiley~/.profilepara shells de entrada en sh / ksh modo de compatibilidad.El shell de inicio de sesión en modo nativo (argv [0] comienza con
-) no se usa~/.profile(~/.zprofileaunque lo hará ):(ninguna salida)
sh / ksh de compatibilidad conchas modo de inicio de sesión utiliza .profile:
fuente