Qual é a diferença entre ">" e ">>"?


12

Qual é a diferença entre ls >e ls >>? Preciso entender isso para minha computação GCSE, mas não sei qual é a diferença.


1
Além da boa resposta abaixo, consulte a segunda (e mais votada) resposta em stackoverflow.com/a/984761/1841533: usar >> para gravar em um arquivo (por exemplo: um log) também tem o bom efeito colateral de Os caracteres "Nul" não aparecerão no início do arquivo saif se o arquivo estiver truncado enquanto o processo ainda estiver gravado nele! (ex: durante a rotação do arquivo de log). Como "foo> file" não procura, ele não percebe a mudança de tamanho e ainda aponta para além do início, e o SO preenche Nul. O arquivo foo >> procura e, portanto, aponta para a nova posição (o começo).
Olivier Dulac

Como essa é uma pergunta educacional, sugiro que você aprenda a trabalhar com a documentação relevante: Manual de Referência do Bash, seção “Redirecionamentos” (também acessível via man bash).
David Foerster

Respostas:


28

>& >>são operadores de redirecionamento; eles transferem a saída de algo, neste caso ls, para outro lugar. Se essa saída for para um arquivo, o arquivo >será truncado - ou seja, excluirá qualquer conteúdo anterior, enquanto >>acrescentará novos dados ao final do arquivo, mantendo o conteúdo anterior. Isso funcionará com qualquer entrada, então echo& cat, por exemplo, também pode ser usado dessa maneira.

Também é interessante o |operador, que passa os dados para outro aplicativo - ls | cat -nfornecendo uma listagem numerada de linhas!

Tubos é o termo relevante.


2
Truncar ou substituir?
DK Bose

2
@DKBose de stracesaída para bash -c 'echo a > blah': open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666), então truncar seria o termo certo.
Muru

"pipes" e também "redirecionamento de saída", que você meio que usou em sua resposta. Bem feito.
precisa saber é o seguinte

Encontrei o que eu quis dizer: Além desta resposta legal, consulte a 2ª (e mais votada) resposta em stackoverflow.com/a/984761/1841533 : using >>to write to a file (ex: a log) também tem o lado legal efeito para não ter caracteres "Nul" aparecer no início do arquivo saif se o arquivo estiver truncado enquanto o processo ainda estiver gravado nele! (ex: durante a rotação do arquivo de log). Como "foo> file" não procura, ele não percebe a mudança de tamanho e ainda aponta para além do início, e o SO preenche Nul. foo >>fileprocura e, portanto, aponta para a nova posição (o começo).
Olivier Dulac

5

Os símbolos >e >>são usados ​​para redirecionar a saída para um arquivo.

Ambos criarão o arquivo se o arquivo não existir. Se o arquivo já existir, >substituirá o arquivo em que como >>anexará os dados ao arquivo.

Então ls > myfile, criará um documento nomeado myfilese ele não existir. Se myfilejá estiver presente e contiver alguns dados, eles serão substituídos pelos novos dados que você passar.

Considerando que ls >> myfileirá criar um arquivo se não existir e gravar dados para ele. Se o arquivo existir com alguns dados, novos dados serão adicionados ao final.


0

Se você usar um único>, ele substituirá o arquivo se ele já existir. Tenha muito cuidado ao usar este.

Se você usar dois >>, ele será anexado (em outras palavras, comece a escrever na parte inferior do arquivo) se ele já existir. Caso contrário, ele cria um novo arquivo, se não existir.


1
Por que repetir uma resposta que já foi dada?
requist
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.