Differenza tra alias in zsh e alias in bash


9

Ho cercato in giro ma non sono riuscito a trovare nulla di conclusivo. C'è una differenza tra il comando alias in zsh e il comando alias in bash? In caso contrario, significa che posso condividere un insieme di alias tra le due shell e aspettarmi che funzionino come previsto?

Risposte:



13

La sintassi del aliascomando è la stessa in tutte le shell in stile Bourne. In modo da poterli condividere in tutto ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, a patto che abbiano senso in tutte le conchiglie.

Lo stesso vale per le definizioni delle variabili e le definizioni delle funzioni, purché si utilizzi il sottoinsieme di sintassi supportato in tutte le shell.

Se non usi versioni di zsh precedenti alla 4.0, puoi mettere tutte le definizioni agnostiche della shell in un file chiamato (diciamo) ~/.common.rc.sh, dove la prima riga è

emulate -LR sh 2>/dev/null

Questo dice a zsh di aspettarsi una sintassi sh compatibile solo in questo file. Poi source che lima vicino all'inizio del ~/.bashrc, ~/.bashrc, ~/.kshrce così via.

Questo è fondamentalmente quello che faccio. Ad esempio, ho il codice piuttosto complesso che genera un alias per lscon le mie opzioni preferite a seconda di ciò che è disponibile ( --color, -G, -F, etc.); è agnostico da shell, quindi entra .common.rc.sh. Ho anche degli alias dipendenti dalla shell, come alias zcp='zmv -C'quello accade .zshrc.


1
Se metto uno /bin/shshebang nella parte superiore del mio file alias funzionerà come intendo per tutte le shell?
Zameer Manji,

1
@ZameerManji No, non mettere una #!riga: questo non è uno script autonomo, può essere acquistato solo in un altro script. #!non cambia comunque il comportamento della shell.
Gilles 'SO- smetti di essere malvagio' il

3
Una piccola differenza che ho scoperto è che zsh aliastratta un argomento che inizia con +l'introduzione di un'opzione come -farebbe, quindi alias +=somethingdeve essere scritto come alias -- +=somethingin zsh. Non pensare emulateche cambi questo.
Mikel,

Fare attenzione ~/.shrcpoiché Bourne Shell ha l'implementazione dell'alias più potente ma zshutilizza nomi di opzioni incompatibili. alias -gcrea un alias persistente $HOME/.globalscon Bourne Shell. La condivisione delle definizioni degli alias è sicura solo se si utilizza nient'altro che le funzionalità POSIX.
schily,

2

zsh's aliaspermette alias globali, mentre bashs vengono espansi solo all'inizio della riga.

In zsh:

alias -g L="| less -FRX"

È quindi possibile fare:

verbose-command L

Vedi qui per un elenco di utili alias globali.


Chiamare tutti gli alias di espansione " alias globali" è una pessima idea dato che esiste un concetto di alias locali che sono limitati a una directory specifica mentre gli alias globali da 38 anni si applicano agli alias indipendenti dalla dieta. Questo concetto è del 1980 di UNOS e implementato nella Bourne Shell da 6 anni. L'UNOS ha introdotto anche tutti gli alias di espansione nel 1980, zsh avrebbe potuto fare alcune ricerche per evitare questo tipo di scontro. Vedere schillix.sourceforge.net/man/man1/bosh.1.html
Schily
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.