¿Podría alguien explicarme la diferencia entre >
y >>
cuando se utilizan comandos de shell?
Ejemplo:
ps -aux > log
ps -aux >> log
Parece que el resultado es el mismo en ambos sentidos.
command-line
whale_steward
fuente
fuente
Respuestas:
>
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 deps aux
se escribirá enfile
y si un archivo llamadofile
ya estaba presente, su contenido se sobrescribirá.Y si lo usa
ps aux >> file
, la salida deps aux
se escribirá enfile
y si el archivo nombradofile
ya estaba presente, el archivo ahora contendrá sus contenidos anteriores y también el contenido deps aux
, escrito después de su contenido anterior defile
.fuente
si escribes en la terminal
Pondrá la salida de
ps aux
registrar el archivo con nombre.entonces si pones
entonces la próxima salida se agregará debajo de la primera. si coloca solo uno
>
, sobrescribirá el archivo anterior.fuente
Sí,
>>
agrega,>
siempre sobrescribe / destruye el contenido anterior.es lo mismo que
En Wintel es lo mismo
.bat
,.cmd
y los.ps1
scripts también; herencia común, sentido común.fuente
La diferencia más importante es que
>
hace que Shell abra un archivo o un objeto similar a un archivo conO_WRONLY|O_CREAT|O_TRUNC
banderas: el archivo se creará o truncará si existe, mientras que>>
abrirá un archivo conO_WRONLY|O_CREAT|O_APPEND
banderas: el archivo se creará o se agregará si existe. Esto es evidente si rastrea llamadas del sistema, por ejemplo conY con
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.
fuente