De this perldoc page,Comment fonctionnent ces redirections de flux?
Pour capturer STDERR et STDOUT une commande ensemble:
$output = `cmd 2>&1`;
Pour capturer STDOUT d'une commande jeter le STDERR:
$output = `cmd 2>/dev/null`;
Pour capturer une commande STDERR mais supprime son STDOUT (la commande est importante ici):
$output = `cmd 2>&1 1>/dev/null`;
Pour échanger STDOUT d'une commande et STDERR afin de capturer le STDERR mais laisser le STDOUT sortir l'ancien STDERR:
$output = `cmd 3>&1 1>&2 2>&3 3>&-`;
Je ne comprends pas comment 3 et 4 travail, et je ne suis pas sûr de ce que je comprends à propos de 1 et 2 est juste. Voici ce que je comprends. S'il vous plaît, corrigez-moi là où j'ai tort.
Je sais que 0
, 1
et 2
symbolisent STDIN
, STDOUT
et STDERR
.
redirect 2 à 1, de sorte que les deux utilisent le même flux maintenant (
&
se sont échappés1
en vous assurant queSTDERR
ne sont pas redirigés vers un fichier nommé1
à la place)redirect 2 (STDERR) à zéro flux, de sorte qu'il est rejeté
Je ne comprends pas celui-ci. Ça ne devrait pas être juste
$output = `cmd 1>/dev/null`;
En outre, si le but est d'obtenir les messages
STDERR
àSTDOUT
, ne1>/dev/null
tout rediriger vers/dev/null
?Que se passe-t-il ici? Quel est le flux
3
? Est-ce comme une variable temporaire?
@skaffman - pourquoi ajouter à nouveau le tag perl? La mention de perl n'est pas liée à la question. –
@bemace: Mon mauvais – skaffman