Capture toda a saída de um script para um arquivo (do próprio script) [duplicado]

6

Eu tenho um script bash que chama vários comandos e imprime alguma saída (tanto dos próprios comandos chamados, como git pull , quanto das mensagens informativas geradas pelo próprio script, como Operation took XX minutes .

Eu gostaria de capturar toda a saída para um arquivo do próprio script : basicamente, estou tentando evitar a necessidade de chamar o ./myscript.sh > file.txt para não relevante aqui razões.

Basicamente, gostaria de fazer algo assim:

startCapture

git pull

echo "Text"

other-command

endCapture

Além disso, também solicito que a saída seja impressa no meu shell enquanto o script está sendo executado.

O objetivo final é:

  1. executar ./myscript.sh sem construção adicional de shell
  2. veja a saída no terminal como eu faço agora
  3. obtém o arquivo no disco com toda a saída

Isso é possível?

    
por Dr. Gianluigi Zane Zanettini 16.02.2018 / 18:06

3 respostas

2

Um método que encontrei para capturar todas as saídas de qualquer sessão é iniciar uma nova sessão bash e tee em um arquivo de log. É realmente útil para rastrear mais do que apenas um script.

bash | tee ~/bash.log #this will save standard output until the bash session is ended
bash | tee ~/bash.log  2>&1 #this will save all output including errors until the bash session is ended

ou você pode apenas tee o script é auto

./myscript.sh | tee ./myscript.log #this will log only the output of the script.

    
por 16.02.2018 / 18:10
2

Você sempre pode invocar script dentro de um script para registrar tudo.

Como imprimir e registrar tudo ao mesmo tempo em um script bash para log.txt :

#!/bin/bash

if [ -z "$SCRIPT" ]
then 
    /usr/bin/script log.txt /bin/bash -c "$0 $*"
    exit 0
fi

echo teste

Vendo o log log.txt :

$ ./a.sh
Script started, output file is log.txt
teste

Script done, output file is log.txt
$ cat log.txt
Script started on Fri Feb 16 17:57:26 2018
command: /bin/bash -c ./a.sh 
teste

Script done on Fri Feb 16 17:57:26 2018
    
por 16.02.2018 / 18:19
1

Você deseja usar tee .

Ex:

echo "Hello World" | tee out.txt

Isso cria um arquivo out.txt com a saída do comando e o imprime na tela. Use "tee -a filename" se você quiser acrescentar ao arquivo.

echo "Hello" | tee -a out.txt
echo "World" | tee -a out.txt

out.txt terá duas linhas Hello e World (sem -a só teria mundo)

Se você quiser salvar o script inteiro e gerar o script inteiro:

./script.sh | tee output.txt
    
por 16.02.2018 / 18:15