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?
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
&>
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:
&>>
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:
&>
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 >>&
.