Quelle est la différence entre ">" et ">>" dans la commande shell?


Réponses:


48

>est utilisé pour écraser (“ clobber ”) un fichier et >>est ajouté à un fichier.

Ainsi, lorsque vous utilisez ps aux > file, la sortie de ps auxsera écrite fileet si un fichier nommé fileétait déjà présent, son contenu sera écrasé.

Et si vous utilisez ps aux >> file, la sortie de ps auxsera écrite fileet si le fichier nommé fileétait déjà présent, le fichier contiendra maintenant son contenu précédent, ainsi que le contenu de ps aux, écrit après son ancien contenu de file.


11

si vous écrivez dans le terminal

ps aux > log

Il mettra la sortie du ps auxjournal nommé fichier.

alors si vous mettez

ps aux >> log

alors la prochaine sortie sera ajoutée en dessous de la première. si vous n'en mettez qu'un seul >, le fichier précédent sera écrasé.


4

Oui, >>ajoute, >écrase / détruit toujours le contenu précédent.

ps -aux > log

est le même que

rm log 2>/dev/null
ps -aux >> log

Sur Wintel est le même pour .bat, .cmdet les .ps1scripts aussi; patrimoine commun, bon sens.


3

La différence la plus importante est que >shell ouvre un fichier ou un objet semblable à un fichier avec des O_WRONLY|O_CREAT|O_TRUNCindicateurs - le fichier sera créé ou tronqué s'il existe, alors qu'un fichier ouvert >>avec des O_WRONLY|O_CREAT|O_APPENDindicateurs - le fichier sera créé ou ajouté s'il existe. Cela est évident si vous tracez des appels système, par exemple avec

$ strace -e open,dup2 bash -c 'true >> /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1

Et avec

$ strace -e open,dup2 bash -c 'true > /dev/null'
...
open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1)                              = 1
dup2(10, 1)                             = 1
+++ exited with 0 +++

Notez que dans les deux cas, le descripteur de fichier du fichier ouvert est dupliqué sur le descripteur de fichier 1 (stdout) de la commande et sera hérité de la commande donnée par le forks du shell.

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.