Diferencia entre alias en zsh y alias en bash

9

He buscado alrededor pero no he podido encontrar nada concluyente. ¿Hay alguna diferencia entre el comando alias en zsh y el comando alias en bash? Si no es así, ¿significa que puedo compartir un conjunto de alias entre las dos capas y esperar que funcionen como yo pretendía?

Zameer Manji
fuente

Respuestas:

7

Según los alias de Zsh Workshop , parecen tener la misma sintaxis, por lo que deberían funcionar.

Rainer Bendig
fuente
Puedo dar fe de ello. El hacer por mí.
frogstarr78
13

La sintaxis del aliascomando es la misma en todos los shells de estilo Bourne. Así se pueden compartir a través de ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, siempre y cuando tengan sentido en todas las conchas.

Lo mismo se aplica a las definiciones de variables y definiciones de funciones, siempre que use el subconjunto de sintaxis compatible con todos los shells.

Si no usa versiones de zsh anteriores a 4.0, puede poner todas sus definiciones agnósticas de shell en un archivo llamado (digamos) ~/.common.rc.sh, donde está la primera línea

emulate -LR sh 2>/dev/null

Esto le dice a zsh que espere una sintaxis compatible con sh solo en este archivo. A continuación, ese archivo fuente cerca del comienzo de ~/.bashrc, ~/.bashrc, ~/.kshrcy así sucesivamente.

Esto es básicamente lo que hago. Por ejemplo, tengo algo complejo código que genera un alias para lscon mis opciones favoritas en función de lo que está disponible ( --color, -G, -F, etc.); es agnóstico a la concha, así que entra .common.rc.sh. También tengo alias dependientes de shell, como alias zcp='zmv -C'eso entra .zshrc.

Gilles 'SO- deja de ser malvado'
fuente
1
Si pongo un /bin/shshebang en la parte superior de mi archivo de alias, ¿funcionará como pretendo para todos los shells?
Zameer Manji
1
@ZameerManji No, no ponga una #!línea: este no es un script independiente, solo se puede encontrar en otro script. #!no cambia el comportamiento del shell de todos modos.
Gilles 'SO- deja de ser malvado'
3
Una pequeña diferencia que encontré es que zsh aliastrata un argumento que comienza con la +introducción de una opción como -would, por lo que alias +=somethingdebe escribirse como alias -- +=somethingen zsh. No pienses emulateque eso cambia.
Mikel
Tenga cuidado ~/.shrcya que Bourne Shell tiene la implementación de alias más potente pero zshusa nombres de opciones incompatibles. alias -gcrea un alias persistente $HOME/.globalscon Bourne Shell. Compartir definiciones de alias solo es seguro siempre que no utilice más que las funciones POSIX.
schily
2

zsh's aliaspermite alias globales, mientras que bashs solo se expanden al comienzo de la línea.

En zsh:

alias -g L="| less -FRX"

Entonces puedes hacer:

verbose-command L

Vea aquí una lista de alias globales útiles.

Tom Hale
fuente
Llamar a todos los alias de expansión alias "globales" es una muy mala idea ya que existe un concepto de alias locales que están restringidos a un directorio específico, mientras que los alias globales desde hace 38 años se aplican a los alias que son independientes de la dieta. Este concepto es de 1980 de UNOS e implementado en Bourne Shell desde hace 6 años. UNOS también introdujo todos los alias de expansión en 1980, zsh podría haber hecho algunas investigaciones para evitar este tipo de choque. Ver schillix.sourceforge.net/man/man1/bosh.1.html
schily