106 votes

Que signifie >& ?

J'ai été un peu dérouté par cette expression :

gcc -c -g program.c >& compiler.txt

Je sais. &>filename redirigera à la fois stdout et stderr vers le fichier filename . Mais dans ce cas, l'esperluette est après le signe plus grand que. On dirait que c'est de la forme M>&N , donde M y N sont des descripteurs de fichiers.

Dans l'extrait ci-dessus, est-ce que M=1 y N='compiler.txt' ? En quoi est-ce différent de :

gcc -c -g program.c > compiler.txt     (ampersand removed)

Si je comprends bien, chaque fichier ouvert est associé à un descripteur de fichier supérieur à 2. Est-ce correct ?

Dans ce cas, un nom de fichier est-il interchangeable avec son descripteur de fichier en tant que cible de la redirection ?

116voto

jordanm Points 6490

C'est la même chose que &> . De la page de manuel de bash :

Redirection de la sortie standard et de l'erreur standard Cette construction permet de rediriger à la fois la sortie standard (descripteur de fichier 1) et l'erreur standard. standard (descripteur de fichier 1) et la sortie d'erreur standard (descripteur de fichier 2) de dont le nom est l'expansion de word.

There are two formats for  redirecting  standard  output  and  standard
error:

       &>word
and
       >&word

Of the two forms, the first is preferred.  This is semantically equiva-
lent to

       >word 2>&1

22voto

Tom Hale Points 5950

&> vs >& la version préférée est &> (clobber)

Concernant :

  • &>
  • >&

les deux vont tronquer le fichier - le tronquer à 0 octet avant de l'écrire, tout comme > file ferait dans le cas de STDIN seulement.

Cependant le bash section Redirections du manuel ajoute que :

Des deux formes, la première est préférable. Elle est sémantiquement équivalente à

>word 2>&1

En utilisant la deuxième forme, mot ne peut pas s'étendre à un nombre ou - . Si c'est le cas, d'autres opérateurs de redirection s'appliquent (voir Duplication des descripteurs de fichiers ci-dessous) pour des raisons de compatibilité.

(Note : sur zsh les deux sont équivalents .)

C'est une très bonne pratique pour obtenir la mémoire des doigts dans les premiers ( &> ), car :

Utilisez &>> comme >>& n'est pas pris en charge par bash (append)

Il n'y a qu'un seul formulaire d'ajout :

Le format pour annexer la sortie standard et l'erreur standard est le suivant :

&>>word

Ceci est sémantiquement équivalent à

>>word 2>&1

(voir Duplication des descripteurs de fichiers ci-dessous).

Note :

  • L'utilisation maladroite de &> sur >& dans la section ci-dessus est à nouveau recommandée étant donné qu'il n'y a qu'une seule façon d'ajouter des données dans le format bash .
  • zsh permet à la fois &>> y >>& formes.

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