web-dev-qa-db-fra.com

Qu'est-ce que> & signifie?

J'étais un peu confus par cette expression:

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

Je sais que &>filename redirigera stdout et stderr vers le fichier filename. Mais dans ce cas, l'esperluette est après le signe supérieur à. Il se présente sous la forme M>&N, où M et N sont des descripteurs de fichier.

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

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

D'après ce que j'ai compris, chaque fichier ouvert est associé à un descripteur de fichier supérieur à 2. Est-ce correct?

Si tel est le cas, un nom de fichier est-il interchangeable avec son descripteur de fichier comme cible de la redirection?

63
contrapositive

Ceci est identique à &>. De la page de manuel bash:

Redirection de la sortie standard et de l'erreur standard Cette construction permet à la fois la sortie standard (descripteur de fichier 1) et la sortie d'erreur standard (descripteur de fichier 2) à rediriger vers le fichier fichier 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
72
jordanm

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

En ce qui concerne:

  • &>
  • >&

les deux vont brouiller le fichier - le tronquer à 0 octet avant d'écrire dessus, comme le ferait > file dans le cas de STDIN uniquement.

Cependant, la section bash manuelle Redirections ajoute que:

Parmi les deux formes, la première est préférée. Ceci est sémantiquement équivalent à

>Word 2>&1

Lorsque vous utilisez le deuxième formulaire, Word ne peut pas être étendu à un nombre ou à -. Si tel est le cas, d'autres opérateurs de redirection s'appliquent (voir la section Copie de descripteurs de fichiers ci-dessous) pour des raisons de compatibilité.

(Remarque: dans zsh les deux sont équivalents .)

Il est très pratique d’obtenir la mémoire de doigt dans le premier (&>), parce que:

Utiliser &>> comme >>& n'est pas supprté par bash (ajouter)

Il n'y a qu'un seul formulaire append:

Le format permettant d'ajouter la sortie standard et l'erreur standard est le suivant:

&>>Word

Ceci est sémantiquement équivalent à

>>Word 2>&1

(voir Descripteurs de fichiers en double ci-dessous).

Remarque:

  • L’utilisation de &> sur >& dans la section ci-dessus est à nouveau recommandée, car il n’existe qu’un moyen d’ajouter dans bash
  • zsh autorise les deux formes &>> et >>&.
0
Tom Hale