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