2010-04-15 15 views
1

Je suis un débutant sous UNIX. Je trouve une certaine difficulté dans la redirection d'entrée/sortie.redirection de sortie sous UNIX

  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 lignes, les mots, les caractères sont 0.

S'il vous plaît aidez-moi à undestand ce concept.

+0

est ce devoir? – reto

+2

Non, ce n'est pas les devoirs. J'apprends l'environnement de programmation Unix de Kernighan et Pike et ce sont des questions d'exercices que je n'obtenais pas. –

+1

bon livre, amusez-vous avec! – reto

Répondre

3
  1. Parce que ls lit tous les noms et les trie avant toute impression, et parce que le fichier de sortie est créé avant que la commande est exécutée, au moment où ls vérifie la taille de temp, il est vide, il apparaît dans la liste comme un fichier vide.

  2. Lorsque wc lit le fichier, il est vide, il signale donc 0 caractère dans 0 mot sur 0 lignes, et écrit cette information dans le fichier après qu'il a fini de lire le fichier vide.

+0

Ok .. Merci. Mais après la commande ls, temp n'est pas vide. Droite? alors pourquoi wc le lit comme un fichier vide? –

+0

Parce que lorsque vous faites 'wc temp> temp', le '> temp' est géré avant l'exécution de la commande, ce qui vide le fichier. Contraste avec 'wc temp >> temp' qui s'ajoute. –

+0

Ok .. Merci beaucoup. –

1

Vous ne pouvez pas écrire et lire à partir du 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 
3

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

... dans cet ordre.