¿Cuál es la diferencia entre ">" y ">>" en el comando de shell?


Respuestas:


48

>se utiliza para sobrescribir (" clobber ") un archivo y >>se utiliza para agregar a un archivo.

Por lo tanto, cuando lo use ps aux > file, la salida de ps auxse escribirá en filey si un archivo llamado fileya estaba presente, su contenido se sobrescribirá.

Y si lo usa ps aux >> file, la salida de ps auxse escribirá en filey si el archivo nombrado fileya estaba presente, el archivo ahora contendrá sus contenidos anteriores y también el contenido de ps aux, escrito después de su contenido anterior de file.


11

si escribes en la terminal

ps aux > log

Pondrá la salida de ps auxregistrar el archivo con nombre.

entonces si pones

ps aux >> log

entonces la próxima salida se agregará debajo de la primera. si coloca solo uno >, sobrescribirá el archivo anterior.


4

Sí, >>agrega, >siempre sobrescribe / destruye el contenido anterior.

ps -aux > log

es lo mismo que

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

En Wintel es lo mismo .bat, .cmdy los .ps1scripts también; herencia común, sentido común.


3

La diferencia más importante es que >hace que Shell abra un archivo o un objeto similar a un archivo con O_WRONLY|O_CREAT|O_TRUNCbanderas: el archivo se creará o truncará si existe, mientras que >>abrirá un archivo con O_WRONLY|O_CREAT|O_APPENDbanderas: el archivo se creará o se agregará si existe. Esto es evidente si rastrea llamadas del sistema, por ejemplo con

$ 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

Y con

$ 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 +++

Observe que en ambos casos el descriptor de archivo del archivo abierto está duplicado en el descriptor de archivo 1 (stdout) del comando, y eso será heredado por cualquier comando que forme el shell.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.