Como faço para salvar a saída do terminal em um arquivo?

Como faço para salvar a saída de um comando em um arquivo?

Existe uma maneira sem usar nenhum software? Gostaria de saber como.

Sim, é possível, basta redirecionar a saída (também conhecida como stdout) para um arquivo:

SomeCommand > SomeFile.txt  

Ou se você quiser anexar dados:

SomeCommand >> SomeFile.txt

Se você quiser stderr também use isso:

SomeCommand &> SomeFile.txt  

ou isso para anexar:

SomeCommand &>> SomeFile.txt  

se você quer ter os dois stderr e saída exibido no console e em um arquivo usar:

SomeCommand 2>&1 | tee SomeFile.txt

(Se você quiser apenas a saída, solte o 2 acima)

Para gravar a saída de um comando em um arquivo, existem basicamente 10 maneiras comumente usadas.

Visao:

Por favor, note que o n.e. na coluna de sintaxe significa "não existente".
Existe uma maneira, mas é muito complicado se encaixar na coluna. Você pode encontrar um link útil na seção lista sobre isso.

          || visible in terminal ||   visible in file   || existing  Syntax  ||  StdOut  |  StdErr  ||  StdOut  |  StdErr  ||   file   ==========++==========+==========++==========+==========++===========    >     ||    no    |   yes    ||   yes    |    no    || overwrite    >>    ||    no    |   yes    ||   yes    |    no    ||  append          ||          |          ||          |          ||   2>     ||   yes    |    no    ||    no    |   yes    || overwrite   2>>    ||   yes    |    no    ||    no    |   yes    ||  append          ||          |          ||          |          ||   &>     ||    no    |    no    ||   yes    |   yes    || overwrite   &>>    ||    no    |    no    ||   yes    |   yes    ||  append          ||          |          ||          |          || | tee    ||   yes    |   yes    ||   yes    |    no    || overwrite | tee -a ||   yes    |   yes    ||   yes    |    no    ||  append          ||          |          ||          |          || n.e. (*) ||   yes    |   yes    ||    no    |   yes    || overwrite n.e. (*) ||   yes    |   yes    ||    no    |   yes    ||  append          ||          |          ||          |          |||& tee    ||   yes    |   yes    ||   yes    |   yes    || overwrite|& tee -a ||   yes    |   yes    ||   yes    |   yes    ||  append

Lista:

  • command > output.txt

    O fluxo de saída padrão será redirecionado apenas para o arquivo, não ficará visível no terminal. Se o arquivo já existir, ele será substituído.

  • command >> output.txt

    O fluxo de saída padrão será redirecionado apenas para o arquivo, não ficará visível no terminal. Se o arquivo já existir, os novos dados serão anexados ao final do arquivo.

  • command 2> output.txt

    O fluxo de erro padrão será redirecionado apenas para o arquivo, não ficará visível no terminal. Se o arquivo já existir, ele será substituído.

  • command 2>> output.txt

    O fluxo de erro padrão será redirecionado apenas para o arquivo, não ficará visível no terminal. Se o arquivo já existir, os novos dados serão anexados ao final do arquivo.

  • command &> output.txt

    Tanto a saída padrão quanto o fluxo de erro padrão serão redirecionados apenas para o arquivo, nada ficará visível no terminal. Se o arquivo já existir, ele será substituído.

  • command &>> output.txt

    Tanto a saída padrão quanto o fluxo de erro padrão serão redirecionados apenas para o arquivo, nada ficará visível no terminal. Se o arquivo já existir, os novos dados serão anexados ao final do arquivo..

  • command | tee output.txt

    O fluxo de saída padrão será copiado para o arquivo, ele ainda estará visível no terminal. Se o arquivo já existir, ele será substituído.

  • command | tee -a output.txt

    O fluxo de saída padrão será copiado para o arquivo, ele ainda estará visível no terminal. Se o arquivo já existir, os novos dados serão anexados ao final do arquivo.

  • (*)

    O Bash não tem sintaxe abreviada que permita canalizar apenas StdErr para um segundo comando, o que seria necessário aqui em combinação com tee novamente para completar a mesa. Se você realmente precisa de algo assim, por favor, olhe para "Como canalizar stderr, e não stdout?"no Stack Overflow em português de algumas maneiras, como isso pode ser feito, por exemplo, trocando fluxos ou usando substituição de processo.

  • command |& tee output.txt

    Tanto a saída padrão quanto os fluxos de erro padrão serão copiados para o arquivo enquanto ainda estão visíveis no terminal. Se o arquivo já existir, ele será substituído.

  • command |& tee -a output.txt

    Tanto a saída padrão quanto os fluxos de erro padrão serão copiados para o arquivo enquanto ainda estão visíveis no terminal. Se o arquivo já existir, os novos dados serão anexados ao final do arquivo.

Você também pode usar tee para enviar a saída para um arquivo:

command | tee ~/outputfile.txt

Uma ligeira modificação também pegará stderr:

command 2>&1 | tee ~/outputfile.txt

ou um pouco mais curto e menos complicado:

command |& tee ~/outputfile.txt

tee é útil se você quiser ser capaz de capture a saída do comando enquanto também a visualiza ao vivo.