Différence entre l'alias en zsh et l'alias en bash

9

J'ai cherché autour mais je n'ai rien trouvé de concluant. Existe-t-il une différence entre la commande alias dans zsh et la commande alias dans bash? Sinon, cela signifie-t-il que je peux partager un ensemble d'alias entre les deux shells et m'attendre à ce qu'ils fonctionnent comme prévu?

Zameer Manji
la source

Réponses:

7

Selon les alias d'atelier Zsh, ils semblent avoir la même syntaxe, donc ils devraient fonctionner.

Rainer Bendig
la source
Je peux l'attester. Le faire pour moi.
frogstarr78
13

La syntaxe de la aliascommande est la même dans tous les shells de style Bourne. Ainsi , vous pouvez les partager à travers ~/.zshrc, ~/.bashrc, ~/.kshrc, ~/.shrc, aussi longtemps qu'ils ont un sens dans toutes les coquilles.

Il en va de même pour les définitions de variables et les définitions de fonctions, tant que vous utilisez le sous-ensemble de syntaxe pris en charge dans tous les shells.

Si vous n'utilisez pas de versions de zsh antérieures à 4.0, vous pouvez placer toutes vos définitions shell-agnostiques dans un fichier appelé (disons) ~/.common.rc.sh, où la première ligne est

emulate -LR sh 2>/dev/null

Cela indique à zsh de ne s'attendre à une syntaxe compatible avec sh que dans ce fichier. Ensuite , la source de ce fichier vers le début ~/.bashrc, ~/.bashrc, ~/.kshrcet ainsi de suite.

C'est essentiellement ce que je fais. Par exemple, j'ai le code assez complexe qui génère un alias pour lsavec mes options préférées en fonction de ce qui est disponible ( --color, -G, -F, etc.); il est agnostique à la coquille, donc il entre .common.rc.sh. J'ai également des alias dépendants du shell, comme alias zcp='zmv -C'ça entre .zshrc.

Gilles 'SO- arrête d'être méchant'
la source
1
Si je mets un /bin/shshebang en haut de mon fichier d'alias cela fonctionnera-t-il comme je l'ai prévu pour tous les shells?
Zameer Manji
1
@ZameerManji Non, ne mettez pas de #!ligne: ce n'est pas un script autonome, il ne peut provenir que d'un autre script. #!ne change pas le comportement du shell de toute façon.
Gilles 'SO- arrête d'être méchant'
3
Une petite différence que j'ai trouvée est que zsh aliastraite un argument commençant par +comme introduisant une option comme le -ferait, donc alias +=somethingdoit être écrit comme alias -- +=somethingdans zsh. Ne pensez pas que cela emulatechange cela.
Mikel
Soyez prudent ~/.shrccar le Bourne Shell a l'implémentation d'alias la plus puissante mais zshutilise des noms d'options incompatibles. alias -gcrée un alias persistant $HOME/.globalsavec le Bourne Shell. Le partage des définitions d'alias n'est sûr que tant que vous n'utilisez pas plus que les fonctionnalités POSIX.
schily
2

zsh's aliasautorise les alias globaux, tandis que bashs n'est développé qu'au début de la ligne.

Dans zsh:

alias -g L="| less -FRX"

Vous pouvez alors faire:

verbose-command L

Voir ici pour une liste d'alias globaux utiles.

Tom Hale
la source
Appeler tous les alias étendus des alias "globaux" est une très mauvaise idée car il existe un concept d' alias locaux qui sont limités à un répertoire spécifique tandis que les alias globaux depuis 38 ans s'appliquent aux alias indépendants de la diectoire. Ce concept date de 1980 d'UNOS et est implémenté dans le Bourne Shell depuis 6 ans. UNOS a également introduit tous les alias expand en 1980, zsh aurait pu faire des recherches pour éviter ce type de conflit. Voir schillix.sourceforge.net/man/man1/bosh.1.html
schily