1 votes

Redirections Shell

Quelqu'un peut-il expliquer ce qui suit ?

:~$ ls macreave.sh fgvdvg > testo 2> testo
:~$ cat testo 
macreave.sh 
ccess fgvdvg: No such file or directory 

:~$ ls macreave.sh fgvdvg > testo 2>&1
:~$ cat testo 
ls: cannot access fgvdvg: No such file or directory 
macreave.sh 

En procédant de la première façon, les premiers caractères du message d'erreur ne sont pas affichés, alors que la deuxième façon le montre parfaitement. Pourquoi cela ?

1voto

Hastur Points 17791

Avec la deuxième commande

:~$ ls macreave.sh fgvdvg > testo 2>&1

vous provoquerez la sortie de stderr de ls pour être écrit dans le même descripteur de fichier que stdout ( 2>&1 ) et le stdout vers le fichier testo pour que vous ayez une flux qui se termine dans votre dossier.

Avec la première commande à la place

ls macreave.sh fgvdvg > testo 2> testo

vous redirigez indépendamment vers le même fichier testo . Le problème est que les pipings et les redirections peuvent être asynchrones (cf. cette réponse aussi ) ; vous avez 2 flux qui finissent dans votre fichier et qui le recréent tous les deux.

Il semble que :

  • le plus rapide était le stderror (pour quelques octets) qui crée un fichier testo ( > ) et écrire à l'intérieur ls : ne peut pas
  • alors il arrive le stdout qui recrée le même fichier ( > ) en effaçant ce qui est à l'intérieur et en mettant la sortie macreave.sh
  • finalement il est arrivé la deuxième partie de stderr qui écrit dans le fichier ce qui reste ccess fgvdvg : pas de fichier ou de répertoire de ce type .

Peut-être que si vous exécutez à nouveau, vous aurez un résultat différent.

Références

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X