zsh
a des modificateurs de précommand, qui précèdent une command pour modifier l'interprétation de la command. Certains d'entre eux sont la command
et l' exec
.
$ zsh -c 'exec -a foo zsh -c "print -- \$0"' foo $ zsh -c 'command -v ls' /bin/ls
Mais ils ont cessé d'accepter des arguments s'ils étaient cités:
$ zsh -c '\exec -a foo zsh -c "print -- \$0"' zsh:1: command not found: -a $ zsh -c '\command -v ls' zsh:1: command not found: -v
Sonne comme les a cité les faisant courir immédiatement sans traiter d'autres arguments.
Il empêche l'alias de prévenir la command
nommée ou exec
de l'expansion est impossible.
Est-ce un bug ou une fonctionnalité? Est-ce documenté quelque part?
Zsh parsing les modificateurs de précommand de la même manière que les alias et les mots-keys: ils doivent être au début d'une command, sans guillemets. Ceci est à peu près nécessaire pour les modificateurs qui affectent l'parsing de la command ( noglob
, nocorrect
). Les modificateurs de builtin
, command
, exec
utilisent la même logique en interne même s'ils peuvent être interprétés autrement.
Pour autant que je sache, il n'y a pas de raison profonde pour cette logique, juste que cela a été fait de cette façon il y a quelques décennies et personne n'a pris suffisamment soin de ce cas limite pour y remédier.
Étant donné que quelque chose comme \command -v ls
ne fait rien de sensible, c'est définitivement un bug.