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.

Helen Schofield
fonte
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.

Mark Williams
fonte
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.

Sudheer
fonte
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.

Eric Larson
fonte
1
Por que repetir uma resposta que já foi dada?
requist