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