Ao executar alguns testes, preciso executar uma série de comandos. Seria extremamente útil para mim e me pouparia muito tempo, se houvesse uma maneira de fazer todas essas coisas:
- Execute o comando que preciso executar
- Redirecione toda a saída do comando para um arquivo especificado
- Inclua o comando original no arquivo especificado
- Imprima a saída do comando original no terminal
As pessoas sugeriram o uso de tee para mim, o que faz um ótimo trabalho de impressão no terminal, além de enviar para um arquivo, mas não inclui o comando original. O que eu gostaria de terminar é um arquivo em que a primeira linha seja o comando que eu executei e, abaixo disso, a saída do comando.
Alguém sugeriu isso:
echo "ls -l" | xargs -I{} bash -c "echo >> output.file; eval {} >> output.file"
Mas isso não imprime a saída no terminal nem inclui o comando original no arquivo.
Eu apreciaria todas as idéias.
command-line
shaneoh
fonte
fonte
tee
.Respostas:
É isso que
tee
você está procurando.imprime a saída
ls -l
para stdout (ou seja, o terminal) e a salva no arquivooutfile
ao mesmo tempo. Mas : Ele não grava o nome do comando nem no stdout nem no arquivo. Para conseguir isso, apenasecho
o nome do comando antes de executar o comando e canalize as duas saídas paratee
:Isso é complicado de digitar, então por que não definir uma função?
Depois disso, você pode simplesmente correr
para obter o resultado desejado. Coloque a função no seu
~/.bashrc
para defini-la em cada novo terminal.Se você deseja especificar o arquivo de saída como o primeiro argumento, como em
em vez disso, faça:
Se você não deseja que o arquivo de saída seja sobrescrito, mas sim anexado a ele, adicione a
-a
opção atee
.fonte
Você pode usar o
script
comando que criará um arquivo datilografado de tudo o que é impresso no seu terminal. Ele cria conchas bifurcadas e registra tudo até que o shell seja encerrado.Então, se eu
cat my_output
receber a mesma saída:fonte
Você pode usar a função de depuração do shell junto com
tee
:( ... )
inicia um sub shell que permite "coletar" os fluxos de saída de todos os comandos executados dentro do sub shell. Ele também contém o efeito doset
comando abaixo para este sub-shell.set -x
ativa ax
opção shell que imprime todos os comandos que o shell executa no fluxo de erros padrão antes de executá-los.2>&1
redireciona o fluxo 2 (erro padrão) para o fluxo 1 (saída padrão).|
redireciona o fluxo de saída padrão do comando esquerdo para o fluxo de entrada padrão do comando direito.tee FILE
copia o fluxo de entrada padrão para o arquivoFILE
e para a saída padrão.Se sua sequência de comandos já estiver em um arquivo de script, faria mais sentido executá-la assim:
fonte