212 votes

Pourquoi commencer une commande shell par un antislash?

\curl -L https://get.rvm.io | bash -s stable

Pourquoi la commande commence-t-elle par \? C'est le site où je l'ai vu.

207voto

John Kugelman Points 108754
alias curl='curl --some --default --options'

Si vous avez un alias pour curl et que vous ne voulez pas l'utiliser, en mettant un backslash devant, vous désactivez l'alias et exécutez directement le binaire curl.

Notez que cela s'applique uniquement dans un shell interactif. Les alias n'ont pas d'effet dans les scripts, il serait donc inutile de les désactiver.

4 votes

Les alias peuvent être utilisés dans les scripts en utilisant shopt -s expand_aliases avant d'utiliser l'alias

0 votes

@lbaby La même chose en Kornshell. Vous désactivez un alias de commande possible en mettant un antislash devant. C'est très courant en Kornshell lorsque les gens définissent des invites de commande avec le nom du répertoire en elles. Notez que la première ligne de cette fonction est ` \cd "$@"`.

1 votes

Il convient de noter que \curl ne contourne aucune fonction shell nommée curl. Pour cela, vous pouvez utiliser la commande intégrée bash command: command curl ...

170voto

Jens Points 17702

La spécification de l'interpréteur de commandes (Bourne/POSIX) dit que la substitution d'alias dans un interpréteur de commandes interactif est supprimée lorsque n'importe quel caractère du mot de commande est entre guillemets. Un antislash est une façon de faire cela, mais il existe également d'autres façons bien connues de mettre entre guillemets: les guillemets simples et doubles. Tous les exemples suivants supprimeront la substitution d'alias:

 \curl
 cur\l
 \c\u\r\l
 "c"url
 "curl"
 "c""u""r""l"
 'curl'
 'cu'"rl"

Utiliser \curl est simplement la manière la plus courante et lisible. Étant donné qu'il s'agit d'une fonctionnalité standardisée, vous pouvez vous attendre à ce qu'elle fonctionne dans tous les interpréteurs de commandes hérités de Bourne.

\curl ressemble un peu à une commande TeX, n'est-ce pas? :-)

17 votes

+1 pour donner la raison spécifique pour laquelle \curl contourne les alias du même nom; notez que seuls les alias sont contournés de cette manière, pas les fonctions shell; command curl ... permettrait de contourner l'un ou l'autre.

1 votes

Je ne vois pas l'intérêt de la dernière phrase. Au fait, vous mentionnez seulement le contournement des alias, mais n'importe quel type de citation contournera également les mots clés.

0 votes

@mklement0 Pas tout à fait sûr ... command() { echo "Pas de commande, lol!"; } ; command -V echo ; \command -V echo ; \command command echo "C'est une commande! (masquant le désespoir)" affiche Pas de commande, lol! x 3.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X