it-swarm-es.tech

Compartir alias y configuración de PATH entre zsh y bash

El Shell que uso normalmente 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/).

Yo 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 está abasteciendo /etc/profile. Puedo obtenerlo en /etc/zsh/zprofile, pero me gustaría alguna otra forma más "adecuada".

24
phunehehe

Crearía un archivo /etc/commonprofile y la fuente tanto en /etc/profile y /etc/zsh/zprofile. Esto le da la oportunidad de compartir configuraciones comunes y aún usar bash respectivamente zsh configuraciones específicas y sintaxis en /etc/profile respectivamente zprofile.

17
fschmitt

Zsh tiene un modo de compatibilidad sh que le permitirá ejecutar el código sh POSIX y algunas extensiones bash. Siempre que no use características de bash que zsh no tiene (con la misma sintaxis), puede tener el mismo archivo generado por ambos shells. Utilice el emulate incorporado para poner zsh en modo de compatibilidad; con el -L, la emulación es local para la función adjunta (no el script fuente adjunto).

source_sh () {
  emulate -LR sh
  . "[email protected]"
}

Para cosas como variables de entorno, puede usar source_sh /etc/profile en /etc/zprofile y source_sh ~/.profile en ~/.zprofile, ya que no es probable que los archivos de perfil utilicen funciones específicas de bash.

Para cosas como alias y definiciones de funciones, dado que es probable que los archivos rc de Shell contengan muchas cosas que no se pueden compartir (Prompt, combinaciones de teclas, configuraciones de finalización,…), use un archivo como ~/.sh_aliases que se obtiene en ~/.bashrc y source_sh 'd en ~/.zshrc.

¿Qué tal un enlace simbólico simple?

ln -s /etc/profile /etc/zsh/zprofile

También puede agregar algo como esto si necesita alguna inicialización condicional:

#Determine our Shell without using $Shell, which may lie
Shell="sh"
if test -f /proc/mounts; then
   case $(/bin/ls -l /proc/$$/exe) in
        *bash) Shell=bash ;;
        *dash) Shell=dash ;;
        *ash)  Shell=ash ;;
        *ksh)  Shell=ksh ;;
        *zsh)  Shell=zsh ;;
    esac
fi
4
echox

En cuanto a las variables, tengo la impresión de que le 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 forma; sin embargo, encontrará rápidamente que los alias no se heredan muy bien entre shells sucesivos y pueden necesitar soluciones.

[1] http://en.wikipedia.org/wiki/Environment_Modules_ (software)

0
fgeorgatos