comprendre une séquence de redirections

8

Si plusieurs redirections sont utilisées ensemble, la modification de leur ordre fait-elle une différence?

Comment comprendre le sens de leur commande? Le canal chaîné de redirections est-il conçu pour lire les redirections de gauche à droite ou de droite à gauche?

Par exemple

command 2>&1 > somefile

command > somefile 2>&1

Merci et salutations!

Tim
la source

Réponses:

7

Oui, la commande fait une différence et doit être lue de gauche à droite.

command 2>&1 >somefiledes moyens pour rediriger stderr (2) vers la destination actuelle de stdout (le terminal). Ensuite, changez stdout pour aller somefile. Donc stderr va au terminal, et stdout va dans un fichier.

command >somefile 2>&1signifie rediriger stdout vers somefile, puis rediriger stderr vers la même destination que stdout (le fichier). Donc, les deux stderr et stdout vont somefile.

Ceci est expliqué dans la section 3.6 du manuel Bash: redirections .

cjm
la source
1
man bash 

dit:

REDIRECTION Avant qu'une commande ne soit exécutée, ses entrées et sorties peuvent être redirigées en utilisant une notation spéciale interprétée par le shell. La redirection peut également être utilisée pour ouvrir et fermer des fichiers pour l'environnement d'exécution du shell actuel. Les opérateurs de redirection suivants peuvent précéder ou apparaître n'importe où dans une simple commande ou peuvent suivre une commande. Les redirections sont traitées dans l'ordre dans lequel elles apparaissent, de gauche à droite.

et

Notez que l'ordre des redirections est significatif. Par exemple, la commande

ls > dirlist 2>&1

dirige à la fois la sortie standard et l'erreur standard vers la liste de fichiers, tandis que la commande

ls 2>&1 > dirlist

dirige uniquement la sortie standard vers le fichier dirlist, car l'erreur standard a été dupliquée à partir de la sortie standard avant que la sortie standard ne soit redirigée vers dirlist.

Utilisateur inconnu
la source