Como gravar a saída de um script bash do terminal sem suprimir a saída do terminal? [duplicado]

7

Como gravar a saída de um script bash do terminal sem suprimir a saída do terminal como $ ./bash-script.sh >> terminal.txt ? e eu quero gravar a saída resultante para texto e mantê-lo no terminal também.

    
por Pavel Sayekat 07.09.2016 / 06:14

3 respostas

6

O comando tee é bom para capturar a saída de comandos não interativos. Para aplicativos de terminal interativo, o pacote bsdutils fornece o comando script , que permite gravar a saída no terminal, permitindo que você interaja com o aplicativo como de costume. A diferença entre os dois é que script dará ao aplicativo a impressão de ser executado em um terminal e isso pode fazer uma diferença na maneira como o utilitário se comporta. Além disso, script captura o erro padrão sem precisar fazer redirecionamentos adicionais na linha de comando do shell.

Você pode usá-lo assim:

$ script -c script.sh output.log

(onde script.sh é considerado em $PATH ) ou

$ script -c "script.sh arguments" output.log

A execução sem a opção -c "${command}" executará o shell e permitirá salvar a sessão do shell em um arquivo.

Como bsdutils é um pacote "essencial" e sua prioridade é "obrigatória", você pode tê-lo instalado. Apenas tente emitir o comando script (seguido por exit para parar a gravação no arquivo padrão typescript ).

Em geral, eu geralmente prefiro script over tee , embora muitos aplicativos terminais interativos pareçam rodar muito bem quando a saída é canalizada para tee .

    
por FooF 07.09.2016 / 08:52
8
  

Eu quero gravar a saída resultante no texto e mantê-la no terminal também

O que você quer é o comando tee . Permite ecoar o texto para stdout e para um arquivo. Por exemplo:

$ ls -l /etc/passwd | tee output_file.txt                                      
-rw-r--r-- 1 root root 2989 6月  17 20:45 /etc/passwd
$ cat output_file.txt                                                          
-rw-r--r-- 1 root root 2989 6月  17 20:45 /etc/passwd
    
por Sergiy Kolodyazhnyy 07.09.2016 / 07:23
8

Você pode usar tee

Por exemplo,

./script.sh | tee logfile

fará com que a saída do script seja salva em logfile , assim como mostrada na saída do terminal.

Se você quiser armazenar todas as saídas de execuções de scripts subseqüentes, convém acrescentar a esse arquivo. Nesse caso, você usaria tee -a

./script.sh | tee -a logfile
./script2.sh | tee -a logfile
    
por Anwar 07.09.2016 / 06:24