Como salvar automaticamente a saída do comando do terminal no arquivo [duplicado]

1

Existe uma maneira que eu posso salvar a saída do comando terminal para um arquivo, sem ter que escrever o comando '| tee /abc.txt 'toda vez?

    
por Zuhayer 22.05.2014 / 20:36

3 respostas

1

Uma opção é usar o programa script

NAME
     script — make typescript of terminal session

SYNOPSIS
     script [-a] [-c command] [-e] [-f] [-q] [-t[=file]] [-V] [-h] [file]

DESCRIPTION
     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).

Observe, entretanto, que script salva tudo no terminal (em vez de apenas saída de comando) - incluindo seqüências de cores ANSI, o que pode dificultar a extração de texto simples do arquivo resultante no caso de terminais coloridos.


ISENÇÃO DE RESPONSABILIDADE:

O seguinte é apenas uma ideia, pode haver dicas que eu não conheço associadas a usá-lo

Similar à sugestão do @ MomentumMori de gerar um sub-bacana tee -d bash, se você quiser obter uma boa aparência com redirecionamentos, você provavelmente poderia fazer algo como

exec 3>&1

para salvar o descritor de arquivo de saída padrão atual e, em seguida,

exec 1> >(tee -a outfile)

A partir deste ponto, a saída padrão é redirecionada para um tee sub processo que acrescenta tudo a outfile . Como não redirecionamos o fluxo de saída do subprocesso, uma cópia da saída do comando também aparece no terminal.

Depois de concluir os comandos cuja saída você deseja capturar, você pode inverter o redirecionamento e fechar o descritor de arquivo temporário

exec 1>&3 3>&-

após o qual você pode procurar em outfile para ver as saídas dos comandos

cat outfile
    
por steeldriver 23.05.2014 / 01:33
1

Sim.

Use tee no seu terminal.

$ bash | tee /abc.txt

Explicação

  • bash iniciará outro shell dentro do que você está atualmente usando. Parece que nada aconteceu, mas se você tentar fechar o terminal você será solicitado com algo como:

    There is still a process running in this terminal. Closing the terminal will kill it.

    Esse processo é bash . Ele vai ler o seu comando como o seu outro shell sem qualquer problema, porque o seu primeiro shell já é, mais provavelmente, executando bash também. É apenas um exemplo. Existem outras conchas e você pode descobrir sobre elas aqui: [Revisor, insira o link 1 aqui]

    Quando terminar, talvez você queira digitar exit para fechá-lo.

  • | é o caractere usado para representar os tubos. M. Jackson explica o que eles estão aqui: link

      

    Pipes. A filosofia UNIX recomenda o uso de programas pequenos, mas altamente focados, que podem ser usados juntos para realizar tarefas complexas. Então, aprender a juntar vários comandos pequenos na linha de comando é uma parte intrínseca de estar confortável com o Bash. Para fazer isso, direcionamos a saída padrão de um programa para a entrada padrão de outro programa, mas não usamos redirecionadores, usamos o operador pipe, '' | ''. No UNIX, os processos conectados por pipes são executados juntos dinamicamente à medida que os dados fluem entre eles.

  • E tee , por questões de integridade: [Revisor, insira o link 2 aqui]
      

    [lê] da entrada padrão e grava na saída e nos arquivos padrão

  •   
  Isso significa que a saída de bash (mais precisamente a saída dos comandos executados dentro dela) será entregue para tee como sua entrada. Remover efetivamente a necessidade de usar | tee /abc.txt após cada um dos seus comandos para ver sua saída no shell, bem como salvá-lo em seu sistema de arquivos.     
por gxtaillon 23.05.2014 / 00:57
0

Não.

Isso tem a ver com o funcionamento dos sockets chamados de "entrada padrão" e "saída padrão", e com a filosofia global das cadeias de ferramentas Unix / Linux de "Do One Thing and Do It Well". Você pode levar um ou dois minutos para entender link

Já que tudo isso foi dito, você poderia escrever um script para agrupar comandos com esse redirecionamento, mas ainda assim não economiza muitos toques de tecla.

    
por James S. 22.05.2014 / 20:45