redirection de sortie sous UNIX

Je suis débutant sous UNIX. Je trouve des difficultés dans la redirection des entrées / sorties.

  1. ls -l >temp

    cat temp

    Voici pourquoi le fichier temporaire est affiché dans la liste et, de plus, il montre 0 caractères.

  2. wc temp >temp

    cat temp

    ici la sortie est 0 0 0 temp . Pourquoi les lignes, les mots, les caractères sont 0.

Aidez-moi à comprendre ce concept.

  1. Comme ls lit tous les noms et les sortinge avant d’imprimer quoi que ce soit, et que le fichier de sortie est créé avant l’exécution de la commande, au moment où ls vérifie la taille de temp , il est vide. fichier vide.

  2. Lorsque wc lit le fichier, celui-ci est vide, il renvoie donc 0 caractère sur 0 mot sur 0 ligne et écrit cette information dans le fichier une fois la lecture du fichier vide terminée.

Lorsque vous dirigez la sortie vers un fichier, ce fichier est créé, la commande est exécutée (donc ls la liste comme un fichier vide et wc compte les caractères dans le fichier vide), puis la sortie est ajoutée au fichier.

… dans cet ordre.

Vous ne pouvez pas écrire et lire le même fichier en même temps.

Alors:

 wc file > file # NOT WORKING # but this works: wc file > file.stats mv file.stats file # if you want that