Qual é a diferença entre ">" e ">>" no comando shell?


Respostas:


48

>é usado para substituir (" clobber ") um arquivo e >>é usado para anexar a um arquivo.

Assim, quando você usa ps aux > file, a saída de ps auxserá gravada filee, se um arquivo nomeado filejá estiver presente, seu conteúdo será sobrescrito.

E se você usar ps aux >> file, a saída de ps auxserá gravada filee, se o arquivo nomeado filejá estiver presente, o arquivo agora conterá o conteúdo anterior e também o conteúdo de ps aux, gravado após o conteúdo anterior de file.


11

se você escrever no terminal

ps aux > log

Colocará a saída de ps auxpara registrar o arquivo nomeado.

então se você colocar

ps aux >> log

a próxima saída será anexada abaixo da primeira. se você colocar apenas um, >ele substituirá o arquivo anterior.


4

Sim, >>acrescenta, >sempre substitui / destrói o conteúdo anterior.

ps -aux > log

é o mesmo que

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

Em Wintel é o mesmo para .bat, .cmde .ps1roteiros também; herança comum, senso comum.


3

A diferença mais importante é que >faz com que o shell abra um arquivo ou objeto semelhante a um arquivo com O_WRONLY|O_CREAT|O_TRUNCsinalizadores - o arquivo será criado ou truncado se existir, enquanto >>abre arquivo com O_WRONLY|O_CREAT|O_APPENDsinalizadores - o arquivo será criado ou anexado se existir. Isso é evidente se você rastrear chamadas do sistema, por exemplo, com

$ 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

E com

$ 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, nos dois casos, o descritor de arquivo do arquivo aberto é duplicado no descritor de arquivo 1 (stdout) do comando, e isso será herdado por qualquer comando que o shell bifurque.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.