Je ne comprends pas très bien comment l'ordinateur lit cette commande.
cat file1 file2 1> file.txt 2>&1
Si je comprends bien, 2>&1
redirigez simplement l'erreur standard vers la sortie standard.
Par cette logique, la commande se lit comme suit:
concaténer des fichiers
file1
etfile2
.envoyer
stdout
de cette opération àfile.txt
.envoyer
stderr
àstdout
.fin?
Je ne sais pas ce que fait l'ordinateur. Par ma logique, la commande devrait être
cat file1 file2 2>&1 > file.txt
mais ce n'est pas correct.
la source
$
?var=$othervar
,$
introduit le nom de la variable sur le côté droit. Dans une redirection comme2>&1
,&
introduit le numéro de descripteur de fichier sur le côté droit. Je dis que vous pouvez y penser comme "le fichier 2 est égal au fichier 1". (Mais il existe deux types d'égaux:<
signifie "pour lire" et>
signifie "pour écrire".)L'ordre de redirection est important et doit être lu de gauche à droite .
Par exemple:
command 2>&1 >somefile
signifie:stderr
(à savoir2
) vers la destination actuelle destdout
(à ce stade, le terminal).stdout
pour aller àsomefile
.Donc, dans ce cas,
stderr
va au terminal etstdout
va dans un fichier, ce qui n'est pas ce que vous voulez probablement.D'autre part,
command >somefile 2>&1
signifie:stdout
verssomefile
stderr
la même destination questdout
(somefile
).Dans ce dernier cas
stderr
,stdout
allez à la foissomefile
, ce qui est probablement ce que vous voulez.la source
>&
Signifie en fait un doublon, il utilise l'appel système dup pour mapper un nouveau descripteur de fichier sur un fichier déjà ouvert.Donc, vous (bash en fait) devez d'abord ouvrir la nouvelle stdout avant, en disant "et rediriger stderr vers la stdout actuellement définie".
la source
&
. pourriez-vous joindre quelques références à cette syntaxe, ou - mieux encore - de bonnes ressources sur le système de dup susmentionné?