Como redirecionar a saída para a tela, bem como um arquivo?

9

Meu objetivo é registrar todas as saídas de um script em um diretório que o script criará.

Por exemplo, eu tenho:

~/.abc.sh :

#! /bin/bash
rails new myapp

Quando eu corro ...

cd ~/code
. ~/.abc.sh

... que criará um novo aplicativo Rails no diretório ~/code/myapp .

Quando o Rails está criando um aplicativo, ele emite um grande volume de texto que eu quero capturar e armazenar em um arquivo de log no mesmo diretório que o comando rails recém-criado. Eu também quero exibir esse texto no terminal também.

Como faço para fazer isso?

    
por Zabba 29.04.2011 / 20:15

1 resposta

19

Você pode usar o comando tee para isso:

command | tee /path/to/logfile

O equivalente sem gravar no shell seria:

command > /path/to/logfile

Se você quiser acrescentar ( >> ) e mostrar a saída no shell, use a opção -a :

command | tee -a /path/to/logfile

Por favor, note que o pipe irá capturar apenas stdout, erros para stderr não são processados pelo pipe com tee . Se você quiser registrar erros (do stderr), use:

command 2>&1 | tee /path/to/logfile

Isso significa: execute command e redirecione o fluxo stderr (2) para stdout (1). Isso será passado para o pipe com o aplicativo tee .

    
por Lekensteyn 29.04.2011 / 20:16

Tags