Salva toda a saída do terminal em um arquivo

45

Existe alguma maneira de salvar toda a saída do terminal em um arquivo com um comando?

  • Não estou falando sobre redirecionamento command > file.txt
  • Não é o histórico history > file.txt , preciso do texto completo do terminal
  • Não com teclas de atalho!

Algo como terminal_text > file.txt

    
por Rafael Senties Martinelli 05.05.2015 / 20:51

3 respostas

56

Você pode usar script . Basicamente, ele salvará tudo que estiver impresso no terminal nessa sessão script .

Em man script :

script makes a typescript of everything printed on your terminal. 
It is useful for students who need a hardcopy record of an 
interactive session as proof of an assignment, as the typescript file 
can be printed out later with lpr(1).

Você pode iniciar uma sessão script digitando apenas script no terminal, todos os comandos subseqüentes e suas saídas serão todos salvos em um arquivo chamado typescript no diretório atual. Você pode salvar o resultado em um arquivo diferente também iniciando script como:

script output.txt

Para sair da sessão screen (parar de salvar o conteúdo), basta digitar exit .

Aqui está um exemplo:

$ script output.txt
Script started, file is output.txt

$ ls
output.txt  testfile.txt  foo.txt

$ exit
exit
Script done, file is output.txt

Agora, se eu ler o arquivo:

$ cat output.txt

Script started on Mon 20 Apr 2015 08:00:14 AM BDT
$ ls
output.txt  testfile.txt  foo.txt
$ exit
exit

Script done on Mon 20 Apr 2015 08:00:21 AM BDT

script também tem muitas opções, por ex. executando silenciosamente -q ( --quiet ) sem mostrar / salvando mensagens do programa, ele também pode executar um comando específico -c ( --command ) em vez de uma sessão, ele também tem muitas outras opções. Verifique man script para obter mais ideias.

    
por 05.05.2015 / 21:07
10

Eu também enfrentei o mesmo problema e, depois de algumas pesquisas, surgiu essa solução:

Adicione ao seu .bash_aliases isto:

# Execute "script" command just once
smart_script(){
    # if there's no SCRIPT_LOG_FILE exported yet
    if [ -z "$SCRIPT_LOG_FILE" ]; then
        # make folder paths
        logdirparent=~/Terminal_typescripts
        logdirraw=raw/$(date +%F)
        logdir=$logdirparent/$logdirraw
        logfile=$logdir/$(date +%F_%T).$$.rawlog

        # if no folder exist - make one
        if [ ! -d $logdir ]; then
            mkdir -p $logdir
        fi

        export SCRIPT_LOG_FILE=$logfile
        export SCRIPT_LOG_PARENT_FOLDER=$logdirparent

        # quiet output if no args are passed
        if [ ! -z "$1" ]; then
            script -f $logfile
        else
            script -f -q $logfile
        fi

        exit
    fi
}

# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'

# Manually saves current log file: $ savelog logname
savelog(){
    # make folder path
    manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
    # if no folder exists - make one
    if [ ! -d $manualdir ]; then
        mkdir -p $manualdir
    fi
    # make log name
    logname=${SCRIPT_LOG_FILE##*/}
    logname=${logname%.*}
    # add user logname if passed as argument
    if [ ! -z $1 ]; then
        logname=$logname'_'$1
    fi
    # make filepaths
    txtfile=$manualdir/$logname'.txt'
    rawfile=$manualdir/$logname'.rawlog'
    # make .rawlog readable and save it to .txt file
    cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
    # copy corresponding .rawfile
    cp $SCRIPT_LOG_FILE $rawfile
    printf 'Saved logs:\n    '$txtfile'\n    '$rawfile'\n'
}

E até o final do seu arquivo .bashrc, adicione isto:

smart_script

Depois de ter feito isso, o comando "script" será executado uma vez em cada sessão de terminal, registrando tudo em '~ / Terminal_typescripts / raw'. Se você quiser, você pode salvar o log de sessão atual após o fato (no final da sessão) digitando 'savelog' ou 'savelog logname' - isso copiará a corrente log cru para '~ / Terminal_typescripts / manual' e também criar log .txt legível nesta pasta. (Se você esquecer de fazer isso, os arquivos de log brutos ainda estarão na pasta, você só precisará encontrá-los.) Além disso, você pode começar a gravar em um novo arquivo de log digitando 'startnewlog'.

Haverá muitos arquivos de log de lixo, mas você poderá limpar os arquivos antigos de tempos em tempos, então não é um grande problema.

(Baseado no link , link )

    
por 17.11.2016 / 08:56
1

Como já foi dito, você pode usar script se souber de antemão que deseja salvar o texto da sessão. Além disso, copiar a saída do terminal e colá-la em um editor de texto parece fazer o truque que acredito.

    
por 26.10.2016 / 05:48