Existe uma maneira fácil de registrar todas as atividades que um script de shell faz?

17

Existe uma maneira fácil de registrar todas as atividades que ocorrem de um script de shell em um arquivo?

Eu tenho um script. Ele gera coisas como "instruções" de eco, assim como outras saídas do programa. Eu conheço os comandos:

command | tee -a "$log_file"

e

command >> logifle.log

O que eu estou perguntando é se existe um parâmetro de shell para log, ou um comando set que eu possa usar ou algo parecido. Eu não necessariamente quero adicionar dezenas de redirecionamentos ou tee para arquivos se eu não precisar. Eu ainda quero obter saída std embora - eu também só quero que seja logado.:wq

    
por j0h 30.07.2015 / 18:17

2 respostas

17

se você normalmente executa seu script com foo.sh , tente executá-lo (supondo que seja um script bash) com bash -x foo.sh . Se você quiser tudo redirecionado para o arquivo, tente bash -x foo.sh > file.log 2>&1 (note que estou redirecionando o stderr também, remova o 2>&1 se você não quiser isso). Se você também quiser ver o que está acontecendo, bash -x foo.sh 2>&1 | tee log.file .

    
por roadmr 30.07.2015 / 18:24
18

Existe uma maneira muito fácil e prática:

Usando script para fazer o texto digitado da sessão de terminal

  1. Inicie o comando script

    Se o argumento file for fornecido, por exemplo, script ~/tmp/output , script salvará o diálogo neste arquivo. Se nenhum nome de arquivo for fornecido, o diálogo será salvo no arquivo typescript

  2. Inicie seu script ou o que você quiser começar

  3. Se o seu script estiver concluído, pare script via Ctrl - D

  4. Verifique a saída no arquivo de saída padrão typescript

Para iniciar seu comando em uma etapa com script , use o parâmetro -c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

O uso de script dentro do seu script não faz sentido porque script bifurca o shell ou inicia um novo shell.

  

Se a variável SHELL existir, o shell bifurcado pelo script será aquele shell. Se SHELL não estiver definido, o shell Bourne será assumido. (A maioria dos shells definem essa variável automaticamente).

    
por A.B. 30.07.2015 / 18:28