Como faço para salvar a saída de um comando em um arquivo?
Existe uma maneira sem usar nenhum software? Eu 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? Eu gostaria de saber como.
Sim é possível, basta redirecionar a saída (AKA
stdout
) para um arquivo:Ou se você quiser anexar dados:
Se você quiser
stderr
também use isso:ou isto para anexar:
se você quiser que ambos
stderr
e a saída sejam exibidos no console e em um arquivo, use isto:(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.
Visão geral:
Lista:
command > output.txt
O fluxo de saída padrão será redirecionado apenas para o arquivo, não será 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 será 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 será 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 será 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 será 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 será 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 permite canalizar apenas StdErr para um segundo comando, que seria necessário aqui em combinação com
tee
novamente para completar a tabela. Se você realmente precisa de algo assim, veja "Como canalizar stderr e não stdout?" no Stack Overflow para algumas maneiras de 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 estiverem 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 estiverem 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:Uma pequena modificação também pegará o stderr:
ou um pouco mais curto e menos complicado:
tee
é útil se você quiser capturar a saída do comando enquanto também a visualiza ao vivo .Você pode redirecionar a saída do comando para um arquivo:
Para anexar a saída do comando a um arquivo em vez de sobrescrevê-lo, use:
Uma melhoria a considerar -
Vários scripts injetarão códigos de cores na saída que você pode não querer sobrecarregar seu arquivo de log.
Para corrigir isso, você pode usar o programa sed para remover esses códigos. Exemplo:
O
script
comandoHá duas perguntas diferentes aqui. A primeira está no título:
A segunda pergunta está no corpo:
Todas as respostas postadas aqui abordam a segunda pergunta, mas nenhuma aborda a primeira pergunta que tem uma ótima resposta em Unix e Linux :
Esta resposta usa um comando pouco conhecido chamado
script
que salva toda a saída do seu shell em um arquivo de texto até que você digiteexit
. A saída do comando ainda aparece na tela, mas também aparece no arquivo de texto .O processo é simples. Usar:
Em seguida, observe a saída gravada dos comandos 1, 2 e 3 com:
Isso é semelhante à resposta anterior de:
|& tee ~/outputfile.txt
depois de cadacommnd
.script
comando adicionou o benefício (ou desvantagem) de recarregar~/.bashrc
quando é iniciado.script
comando mostra o prompt de comando ($PS1
) seguido pelos comandos que você digitou.script
comando grava todos os detalhes em cores.Enviar saída para a área de transferência
Muitas vezes queremos que a saída vá para a área de transferência para que possamos colá-la mais tarde. A partir desta resposta , você pode usar:
Agora você pode usar Ctrl+ Vem quase qualquer aplicativo para colar a saída do terminal em seu documento. Para colar a saída do terminal na área de transferência de volta ao seu terminal, use Ctrl+ Shift+ V.
some_command | tee command.log
esome_command > command.log
tem o problema de não salvar a saída do comando nocommand.log
arquivo em tempo real.Para evitar esse problema e salvar a saída do comando em tempo real, você pode anexar
unbuffer
, que vem com oexpect
pacote.Exemplo:
Assumindo
log.py
contém:você pode correr
unbuffer python log.py | tee command.log
ouunbuffer python log.py > command.log
Mais informações: Como posso salvar uma saída de comando em um arquivo em tempo real?
Para
cron
trabalhos etc, você deseja evitar as extensões Bash.sh
Os operadores de redirecionamento POSIX equivalentes sãoVocê notará que o recurso POSIX é, de certa forma, mais simples e direto. A
&>
sintaxe foi emprestada docsh
que já deve convencê-lo de que é uma má ideia.Se você deseja gerar a saída para o arquivo enquanto o comando está sendo executado:
Use os recursos do emulador de terminal
Uma opção ainda não mencionada, que também pode salvar cores/cores, é usar um programa de console — como
Konsole
(o emulador de terminal padrão do KDE/Plasma) — para salvar a saída.Konsole
o atalho é Ctrl+ Shift+ S; ele permite que a saída seja salva como um arquivo de texto ou como HTML incluindo cores! Não tenho certeza exatamente quanto ele economizará, mas no meu teste incluiu apenas ~ 1000, toda a rolagem do terminal (você pode aumentar o buffer criando um novo perfil, Perfil > Novo ... e, em seguida, alterar a rolagem configurações para capturar mais; Konsole versão 4:21.08.1).
gnome-terminal
gnome-terminal
tem "copiar saída como HTML" também, o que permite colar o HTML em um documento; ele preserva a cor, mas apenas copia o conteúdo da saída exibida atualmente na tela AFAICT.genericamente
Você pode, é claro, fazer uma seleção direta de arrastar (manter pressionado o botão esquerdo do mouse enquanto arrasta) e depois copiar ( ctrl+ c, Editar > Copiar ou clicar com o botão direito do mouse e escolher copiar).
outros?
Sinta-se à vontade para modificar esta resposta para incluir outros aplicativos de terminal populares. Meu favorito,
Yakuake
, não parece ter esse recurso, nem a maioria dos terminais populares que analisei, incluindo terminal.app e Hyper.