Shell des redirections


1

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 le faisant de la première façon, il mange les premiers caractères du message d’erreur, la seconde le montre parfaitement. Pourquoi donc?

Réponses:


1

Avec la deuxième commande

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

vous ferez en sorte que la sortie de stderr lssoit écrite dans le même gestionnaire de fichiers que stdout ( 2>&1) et que stdout dans le fichier testo: vous avez ainsi un flux unique qui se termine dans votre fichier.

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 asyncronus (voir aussi cette réponse ); vous avez 2 flux qui finissent dans votre fichier en le recréant.

Il paraît que:

  • le plus rapide est le stderror (pour quelques octets) qui crée un file testo( >) et écrit à l'intérieur de ls: ne peut pas
  • puis il est arrivé le stdout qui recrée le même fichier ( >) en effaçant ce qu'il contient et met la sortie macreave.sh
  • enfin, la deuxième partie de stderr est arrivée qui écrit dans le fichier ce qui reste ccess fgvdvg: Aucun fichier ni répertoire de ce type .

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

Références

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.