Como salvar a saída de um comando em um arquivo?
Existe uma maneira sem usar nenhum software? Eu gostaria de saber como
command-line
led-Zepp
fonte
fonte
someCommand 2> someFile.txt
esomeCommand 2>> someFile.txt
também redirecionastterr
para someFile.txtmake
comando em um arquivo, é necessário esta sintaxe:make > someFile.txt 2>&1
(fonte: linuxquestions.org/questions/linux-newbie-8/… )Para gravar a saída de um comando em um arquivo, existem basicamente 10 maneiras comumente usadas.
Visão global:
Lista:
command > output.txt
O fluxo de saída padrão será redirecionado apenas para o arquivo, não estará 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 estará 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 estará 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 estará visível no terminal. Se o arquivo já existir, os novos dados serão anexados ao final do arquivo.
command &> output.txt
A saída padrão e o fluxo de erros 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
A saída padrão e o fluxo de erros 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, 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, 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 possui sintaxe abreviada que permite canalizar apenas StdErr para um segundo comando, o que seria necessário aqui em combinação com
tee
novamente para concluir a tabela. Se você realmente precisa de algo assim, consulte "Como canalizar stderr, e não stdout?" no Stack Overflow, de algumas maneiras, como isso pode ser feito, por exemplo, trocando fluxos ou usando a substituição de processo.command |& tee output.txt
A saída padrão e 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
A saída padrão e 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.
fonte
2>&1
redireciona STDERR para STDOUT,1>&2
redireciona STDOUT para STDERR e3>&1
redireciona o fluxo 3 para STDERR.sh: 1: Syntax error: "&" unexpected
quando uso|& tee
de um script Python em um servidor c9.io. Parece que um shell diferente está sendo usado.echo $SHELL
mostra/bin/bash
e$SHELL --version
mostra a versão 4.3.11 (1) - liberação. Eu tentei#!/bin/bash
no meu script python, mas ainda assimsh: 1: Syntax error
. Eu consegui o que precisava, então estou desistindo de classificar a estranheza entresh
ebash
no meu servidor. Obrigado.sh
e nãobash
(ou talvezbash
nosh
modo ...). Você pode verificar exatamente o que seu processo de shell atual está usandops -p $$ -o cmd=
, porqueecho $SHELL
não é confiável e mostrará seu shell de login, ignorando se você pode ter iniciado um subshell diferente.Você também pode usar
tee
para enviar a saída para um arquivo:Uma leve modificação também trará stderr:
ou um pouco mais curto e menos complicado:
tee
é útil se você deseja capturar a saída do comando enquanto a exibe ao vivo .fonte
2>&1
?Você pode redirecionar a saída do comando para um arquivo:
Para acrescentar a saída do comando a um arquivo em vez de substituí-lo, use:
fonte
Uma melhoria a considerar -
Vários scripts injetam códigos de cores na saída, que você pode não querer desorganizar no seu arquivo de log.
Para corrigir isso, você pode usar o programa sed para remover esses códigos. Exemplo:
fonte
ls
egrep
, suportam--color=auto
, que emitem códigos de cores somente se a saída padrão for um terminal.Para
cron
trabalhos, etc, você deseja evitar as extensões do Bash. Ossh
operadores de redirecionamento POSIX equivalentes sãoVocê notará que o recurso POSIX é, em certo sentido, mais simples e direto. A
&>
sintaxe foi emprestada dacsh
qual já deveria convencê-lo de que é uma má ideia.fonte
some_command | tee command.log
esome_command > command.log
tenha o problema de que eles não salvam 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 o
unbuffer
que acompanha oexpect
pacote.Exemplo:
Supondo que
log.py
contenha:você pode correr
unbuffer python log.py | tee command.log
ouunbuffer python log.py > command.log
Mais informações: Como salvar uma saída de comando em um arquivo em tempo real?
fonte