Comment vous souvenez-vous de la syntaxe de la redirection 2> & 1 [fermé]


12

Avez-vous un mnémonique ou un système? Cela me dérange depuis des années, je dois toujours chercher

Réponses:


19

Si vous êtes un programmeur C, vous pouvez penser &1à "l'adresse de 1", donc 2>&1"rediriger le descripteur de fichier # 2 au même endroit que # 1".


Je ne sais pas si ça aide ... Les mnémoniques sont un truc assez personnel.
lgeorget

+12 C'est aussi une description correcte de ce qui se passe.
Stéphane Chazelas

1
Je me demande si c'est à quoi cela a été pensé ("l'adresse du 1") quand il a été inventé. Comme certaines personnes ont fortement contribué à la fois au langage C et à UNIX lors de leur invention, il est possible
lgeorget

1
Je pourrais commencer à utiliser celui-ci à la place;)
goldilocks

3

"Deux à un" ("à" l'être >) a plus de sens logique pour moi que "Deux à un", ce avec quoi je pourrais généralement le confondre. Si vous considérez «et un» comme un seul nom (un lieu), cela a également un sens grammatical dans le contexte, ce qui est plus difficile à faire avec «deux et un» - vous devez considérer «un» comme un seul nom, et cela n'aurait toujours pas de sens contextuel.


2
Je ne comprends pas
Matt

2

Pas un mnémonique, mais je l'ai lu comme suit:

0est stdin. 1est stdout. 2est stderr. >est dans. <est sorti. &est le descripteur de fichier (dans certains shells).

2>&1
2      >    &               1
stderr into file descriptor 1

redirect stderr into stdout

Cela pourrait changer si vous avez joué avec l'un des descripteurs de fichiers avant la redirection ...

2>somefile 1>&2
2      >    somefile     1      >    &2
stderr into somefile and stdout into file descriptor 2

redirect stderr into somefile and stdout into somefile. 

2

Lorsque vous écrivez 2>&1, vous dites que "l'erreur standard va à la sortie standard".

Décomposons cela.

Vous voulez d'abord mémoriser que l'erreur standard est 2et que la sortie standard est 1.

Vous avez donc 2quelque chose quelque chose 1.

"va à" est écrit >.

Vous avez donc 2>quelque chose 1.

2>filenamesignifie envoyer l'erreur standard à filename. Mais vous ne voulez pas l'envoyer dans un fichier appelé 1. Vous voulez autre chose: le numéro d'un fichier déjà ouvert. C'est pour ça &.

Alors 2>&1.

Vous pouvez également y penser comme si vous faisiez une mission, où l' >est comme un égal et l' &est comme un $, comparez:

f=$1
2>&1

Pour comprendre une ligne de commande avec plusieurs redirections, la chose importante à savoir est que les redirections se font de gauche à droite. Voir Ordre des redirections pour plus de détails à ce sujet.


0

Je me suis souvenu qu'il est toujours 2 -> 1. Stderr à stdout.

La partie médiane est toujours la plus difficile et je l'ai toujours gâchée, jusqu'à ce que je me souvienne que vient d'abord le caractère pointu >, puis le personnage que je ne peux pas écrire dans la vraie vie &.

Alors jamais 2&>1, toujours2>&1


0

Si vous comprenez que FD2 est STDERR, vous pourriez penser, "Oh, et capturez STDERR partout où j'envoie STDOUT (FD1)".


0

Mes collègues et moi disons généralement "deux est supérieur à un", car la plupart d'entre nous ne se souviennent pas toujours que stderrc'est un descripteur de fichier 2et qu'il l' stdoutest 1(en particulier ceux qui sont nouveaux pour unix / linux), donc les autres mnémoniques sur la redirection stderrne fonctionnent pas vraiment . Seul problème, vous devez toujours vous rappeler où va l'esperluette!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.