Bash: Como redirecionar a saída de todos os comandos para um arquivo?

4

Eu frequentemente executo buscas no meu repositório de código-fonte assim:

ack -l "foo bar" .

As pesquisas podem levar de 10 a 60 segundos e produzir uma saída assim:

path/to/file1       
path/to/file2
path/to/file3

Eu freqüentemente uso este alias para abrir todos os arquivos encontrados no vim:

alias go='gvim 'fc -s' -p'

Isso funciona bem, mas fc -s executa novamente o comando anterior, o que pode levar segundos ou minutos.

Seria muito útil acrescentar algo assim a todos os comandos que gero de forma interativa:

| tee /tmp/lastCommand to all commands.  

Dessa forma, se a saída se revelar útil, posso fazer outra coisa.

Exemplo de uso:

Tipo:

find . -type f 

Que executa o seguinte:

find . -type f | tee $lastOutLocation # Where lastOutputLocation=/tmp/lastOutput

Você poderia usar algo assim para filtrar o comando anterior:

lastOut | grep "SomeString" # Where lastOut is an alias to cat $lastOutputLocation

Existe um mecanismo que eu possa usar para fazer algo assim? Eu não acho que os aliases exponham esse tipo de comportamento.

Potenciais Hurtles:

  • Obtendo algo que funciona com comandos compostos: echo 'baz' ; echo 'bar'
  • Descobrir como modificar o comando que o usuário digitou antes de executá-lo
  • Ignore coisas como entradas interativas. Não deseja capturar prompts de senha

Possíveis soluções, estou explorando atualmente:

por sixtyfootersdude 13.01.2017 / 18:26

2 respostas

2

It would be very useful to append something like this to every command I run interactively:

| tee /tmp/lastCommand to all commands.  

Um possível início pode ser o uso de ~/.inputrc para vincular uma chave. (Esse é o arquivo de configuração para a biblioteca GNU Readline.) Por exemplo, usando a letra, o, como um mnemônico para o utput ...

Control-o: " | tee /tmp/lastCommand"

Pode-se ligar à tecla Retornar / Enter , mas essa ação teria efeitos indesejados.

    
por 19.01.2017 / 16:18
-1

Se eu entendi que você deseja redirecionar a saída de seus comandos para um arquivo, isso pode ser feito por:

#command > output_file
Or also #command | output_file

O primeiro altera o canal de saída para que tudo o que ele escreveria no terminal seja gravado no output_file, e o segundo canalize ambos os programas ...

    
por 19.01.2017 / 15:43

Tags