Ce que vous demandez n'a pas vraiment de sens.
mot-clé signifie que c'est un mot qui fait partie de la syntaxe du shell. Ceux-ci sont reconnus par la tokenisation. Les citer suffit pour que le shell cesse de reconnaître.
Il est cependant possible d'alias un mot-clé dans la plupart des shells. Ainsi, les alias ont priorité sur les mots clés (en fait, ils sont développés tôt, et il y a plus de tokenisation après cela où vous pouvez avoir plus d'alias, de mots clés) ...
alias (à l'exception des alias zsh définis avec alias -g
ne sont développés qu'en position de commande), donc généralement pas dans builtin the-alias
.
les fonctions ont la priorité sur les commandes intégrées et les commandes intégrées sur les commandes externes (puis $PATH
décident laquelle utiliser).
Vous pouvez forcer l'intégration avec:
builtin the-cmd and its args
(même s'il faut noter que ce n'est pas une commande standard).
Vous pouvez désactiver les alias en les citant (bien que la version citée puisse également être aliasée dans certains shells).
Ainsi, par exemple (ici la syntaxe zsh), dans:
'while'() echo function while
alias 'while=echo alias while'
L'écriture while true
produirait en fait alias while true
, et il n'y aurait aucun moyen d'utiliser le while
mot - clé car le citer désactiverait à la fois l'alias et le mot-clé.
Vous appelleriez la while
fonction avec par exemple:
'whi'le whatever
S'il y avait une fonction while
intégrée (mais bien sûr, elle ne le serait pas dans les shells qui ont un while
mot - clé), vous l'écririez:
builtin while whatever
Et pour appeler la while
commande, vous écririez:
env while whatever
ou dans zsh
(lorsqu'il n'est pas en sh
émulation):
command while whatever
(dans d'autres shells, command
empêche uniquement les fonctions, pas les fonctions intégrées)
Ou
/full/path/to/while whatever
Bien sûr, rien ne vous empêche de faire des choses encore plus stupides comme:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Ce qui, au moins en zsh est valide (mais stupide).
command
supprime la recherche de fonction, mais aucune de celles-ci ne spécifie lequel des synonymes restants sera utilisé. Je cherche un moyen de spécifier d'exécuter uniquement un synonyme spécifique .builtin
est utilisé par exemple dans RVM pour passer outrecd
pour un bel effet.Un idiome extrêmement utile pour moi est le suivant:
Maintenant, si j'exécute le script avec -D spécifié, le mode de développement est activé et le cd (ou toute autre commande encapsulée) fait écho aux informations de débogage
Ceci est particulièrement utile avec les scripts qui exécutent ssh. Bien sûr, je pourrais basculer set -x, mais c'est plus utile et plus lisible pour moi.
la source