Supposons qu'un fichier appelé abc
existe dans le répertoire actuel et qu'il contient du texte. Lorsque vous exécutez la commande:
cat abc > abc
Pourquoi le contenu du fichier abc
disparaît-il?
Pourquoi la commande supprime-t-elle le texte et le fichier devient un fichier vide?
files
io-redirection
cat
Tulsi Kanodia
la source
la source
cut
modifier un fichier sur place?cat abc | dog abc
tee
.Réponses:
En raison de l'ordre dans lequel les choses sont faites.
Quand vous faites:
>
est l'opérateur de redirection de sortie, lorsque le shell le voit, il ouvre le fichier en mode troncature en utilisantO_TRUNC
flag avecopen(2)
ieopen("abc", O_TRUNC)
, donc tout ce qui était dans le fichier disparaîtra. Notez que cette redirection est effectuée en premier par le shell avant l'cat
exécution de la commande.Ainsi, lorsque la commande
cat abc
s'exécute, le fichierabc
est déjà tronqué etcat
le trouvera donc vide.la source
cat: filename: input file is output file
(oùfilename
est le nom de fichier que vous avez choisi) est imprimé sur l'ancienne sortie standard.Ajout à la réponse de @ heemayl , si vous voulez que le code soit plus clair sur la séquence dans laquelle les choses se passent, vous pouvez simplement mettre les redirections quelconques au début de la commande:
la source