El shell que normalmente uso es zsh
. Tengo varios alias para habilitar el color en algunos programas como ls
y grep
. También configuré mi ruta personalizada para poder ejecutar programas en un lugar no estándar (como en ~/bin/
).
No cambiaré el shell de root a zsh
, pero me gustaría compartir esta configuración para que root pueda tenerla también. Descubro que zsh
no se trata de abastecimiento /etc/profile
. Puedo obtenerlo /etc/zsh/zprofile
, pero me gustaría alguna otra forma más "adecuada".
Zsh tiene un modo de compatibilidad sh que le permitirá ejecutar código POSIX sh y algunas extensiones bash. Siempre que no use las funciones de bash que no tiene zsh (con la misma sintaxis), puede tener el mismo archivo originado por ambos shells. Use el
emulate
incorporado para poner zsh en modo de compatibilidad; con la-L
opción, la emulación es local para la función de cierre (no el script de fuente de cierre).Para cosas como las variables de entorno, puede usar
source_sh /etc/profile
in/etc/zprofile
ysource_sh ~/.profile
in~/.zprofile
, ya que no es probable que los archivos de perfil usen características específicas de bash.Para cosas como alias y definiciones de funciones, dado que es probable que los archivos shell rc contengan muchas cosas que no se pueden compartir (solicitud, enlaces de teclas, configuraciones de finalización, ...), use un archivo como
~/.sh_aliases
ese que se obtiene~/.bashrc
ysource_sh
'd en~/.zshrc
.fuente
¿Qué pasa con un enlace simbólico simple?
ln -s /etc/profile /etc/zsh/zprofile
También puede agregar algo como esto si necesita una inicialización condicional:
fuente
/bin/ls -l /proc/$$/exe
esps -o comm= -p $$
. Esto no es totalmente confiable porque algunos shells se comportan de manera diferente dependiendo de cómo se invocaron; en la práctica, simplemente prueba$0
de.profile
que es probable que sea una mejor indicación. Pero la mayoría de los depósitos que ofrecen funciones útiles (bash, ksh, zsh) pueden ser simplemente reconocidos (y su versión identificada, la cual es una gran ventaja) mediante pruebas de algunas variables:$BASH
,$BASH_VERSION
,$BASH_VERSINFO
;$KSH_VERSION
,${.sh.version}
;$ZSH_VERSION
.En cuanto a las variables, tengo la impresión de que faltan módulos y archivos de módulo [1]. Una vez que comience a hacerlo, será fácil crear perfiles comunes para varios shells (incluidos bash y zsh), python, perl e incluso más entornos, todo desde la comodidad de un solo archivo de módulo.
También es posible definir alias de la misma manera; sin embargo, encontrará rápidamente que los alias no se heredan muy bien entre los shells sucesivos y pueden necesitar soluciones alternativas.
[1] http://en.wikipedia.org/wiki/Environment_Modules_(software)
fuente