Respostas:
Sim, é possível, apenas redirecione a saída para um arquivo:
SomeCommand > SomeFile.txt
Ou se você deseja anexar dados:
SomeCommand >> SomeFile.txt
Se você também deseja stderrusar isso:
SomeCommand &> SomeFile.txt
ou isto para acrescentar:
SomeCommand &>> SomeFile.txt
se você deseja stderrexibir os dois e a saída no console e em um arquivo, use este:
SomeCommand 2>&1 | tee SomeFile.txt
(Se você deseja apenas a saída, solte a opção 2acima)
makecomando 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.
Observe que a
n.e.coluna na sintaxe significa "não existente".
Existe uma maneira, mas é muito complicado caber na coluna. Você pode encontrar um link útil na seção Lista sobre ele.
|| 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 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 teenovamente 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.
2>&1redireciona STDERR para STDOUT, 1>&2redireciona STDOUT para STDERR e 3>&1redireciona o fluxo 3 para STDERR.
sh: 1: Syntax error: "&" unexpectedquando uso |& teede um script Python em um servidor c9.io. Parece que um shell diferente está sendo usado. echo $SHELLmostra /bin/bashe $SHELL --versionmostra a versão 4.3.11 (1) - liberação. Eu tentei #!/bin/bashno meu script python, mas ainda assim sh: 1: Syntax error. Eu consegui o que precisava, então estou desistindo de classificar a estranheza entre she bashno meu servidor. Obrigado.
she não bash(ou talvez bashno shmodo ...). Você pode verificar exatamente o que seu processo de shell atual está usando ps -p $$ -o cmd=, porque echo $SHELLnão é confiável e mostrará seu shell de login, ignorando se você pode ter iniciado um subshell diferente.
Você também pode usar teepara enviar a saída para um arquivo:
command | tee ~/outputfile.txt
Uma leve modificação também trará stderr:
command 2>&1 | tee ~/outputfile.txt
ou um pouco mais curto e menos complicado:
command |& tee ~/outputfile.txt
teeé útil se você deseja capturar a saída do comando enquanto a exibe ao vivo .
2>&1?
Você pode redirecionar a saída do comando para um arquivo:
your_command >/path/to/file
Para acrescentar a saída do comando a um arquivo em vez de substituí-lo, use:
your_command >>/path/to/file
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:
command 2>&1 | sed -r 's/'$(echo -e "\033")'\[[0-9]{1,2}(;([0-9]{1,2})?)?[mK]//g' | tee ~/outputfile.txt
lse grep, suportam --color=auto, que emitem códigos de cores somente se a saída padrão for um terminal.
Para crontrabalhos, etc, você deseja evitar as extensões do Bash. Os shoperadores de redirecionamento POSIX equivalentes são
Bash POSIX
------------ --------------
foo &> bar foo >bar 2>&1
foo &>> bar foo >>bar 2>&1
foo |& bar foo 2>&1 | bar
Você notará que o recurso POSIX é, em certo sentido, mais simples e direto. A &>sintaxe foi emprestada da cshqual já deveria convencê-lo de que é uma má ideia.
some_command | tee command.loge some_command > command.logtenha o problema de que eles não salvam a saída do comando no command.logarquivo em tempo real.
Para evitar esse problema e salvar a saída do comando em tempo real, você pode anexar o unbufferque acompanha o expectpacote.
Exemplo:
sudo apt-get install expect
unbuffer some_command | tee command.log
unbuffer some_command > command.log
Supondo que log.pycontenha:
import time
print('testing')
time.sleep(100) # sleeping for 100 seconds
você pode correr unbuffer python log.py | tee command.logouunbuffer python log.py > command.log
Mais informações: Como salvar uma saída de comando em um arquivo em tempo real?
someCommand 2> someFile.txtesomeCommand 2>> someFile.txttambém redirecionastterrpara someFile.txt