canaliza script inteiro para arquivo e terminal

0

Eu quero um 1 liner para pipe para arquivar e terminal ao mesmo tempo (escrever 1 comando, então todos os outros comandos são mostrados como normal no terminal, mas a saída, de preferência, mas não obrigatório: nome do comando, para ser anexado a um arquivo )
, eu sei exec faz isso:

exec > /vga/log/$(date +'%Y%m%d.%H%M%S').txt
ls

mas agora eu não consigo ver nada no terminal, como posso adicionar tee ao acima para que ele funcione, ive tentou

exec > tee /vga/log/$(date +'%Y%m%d.%H%M%S').txt
ls
# creates a file called 'tee' with output, nothing in terminal

exec | tee /vga/log/$(date +'%Y%m%d.%H%M%S').txt
ls
# creates file uninst_total_20150729.161010.txt but is empty, terminal is ok

- solução

#!/bin/bash
exec 1> >(tee -a /vga/log/$(date +'%Y%m%d.%H%M%S').txt)
exec 2>&1
ls
    
por Then Enok 29.07.2015 / 15:23

2 respostas

2

O que você procura é isso:

exec 1> >(tee -a $LOGFILE)

Todos os dados que é enviado do canal da calha 1 (stdout) é redirecionado linha por linha para tee que acrescenta -a para um arquivo e imprime-lo para a saída padrão.

Se você deseja redirecionar ambos, stdout e stderr, use este após a primeira declaração exec de cima:

exec 2>&1
    
por chaos 29.07.2015 / 15:28
1

Usando script

  1. Iniciar o comando script
  2. Faça suas atividades
  3. Parar script através de Ctrl - D
  4. Veja a saída em typescript

Exemplo

% script
% ls -og
total 72
-rw-rw-r-- 1   0 Jul 24 15:11 e
-rw-rw-r-- 1  43 Jul 29 12:54 File1
-rw-rw-r-- 1  26 Jul 29 09:07 File2
-rwxrwxr-x 1 557 Jul 29 09:02 foo
-rw-rw-r-- 1  23 Jul 29 15:33 out
-rw-rw-r-- 1   0 Jul 29 15:32 test
-rw-rw-r-- 1   0 Jul 29 16:01 typescript

Ctrl - D

% 
Script started, file is typescript
                                  Script started, file is typescript
Script done, file is typescript

% cat typescript 
Script started on Mi 29 Jul 2015 16:01:31 CEST
% ls -og
total 72
-rw-rw-r-- 1   0 Jul 24 15:11 e
-rw-rw-r-- 1  43 Jul 29 12:54 File1
-rw-rw-r-- 1  26 Jul 29 09:07 File2
-rwxrwxr-x 1 557 Jul 29 09:02 foo
-rw-rw-r-- 1  23 Jul 29 15:33 out
-rw-rw-r-- 1   0 Jul 29 15:32 test
-rw-rw-r-- 1   0 Jul 29 16:01 typescript
[aboettger:~/tmp] % 

Script done on Mi 29 Jul 2015 16:01:39 CEST

Usando tee

<your_command> | tee -a out

De man tee

-a, --append
      append to the given FILEs, do not overwrite

Exemplo

$ ls -ogla | tee -a out
total 80
drwxrwxr-x  2  4096 Jul 29 15:29 .
drwx------ 52 20480 Jul 29 15:26 ..
-rw-rw-r--  1     0 Jul 24 15:11 e
-rw-rw-r--  1    43 Jul 29 12:54 File1
-rw-rw-r--  1    26 Jul 29 09:07 File2
-rwxrwxr-x  1   557 Jul 29 09:02 foo
-rw-rw-r--  1     0 Jul 29 15:29 out

$ cat out
total 80
drwxrwxr-x  2  4096 Jul 29 15:29 .
drwx------ 52 20480 Jul 29 15:26 ..
-rw-rw-r--  1     0 Jul 24 15:11 e
-rw-rw-r--  1    43 Jul 29 12:54 File1
-rw-rw-r--  1    26 Jul 29 09:07 File2
-rwxrwxr-x  1   557 Jul 29 09:02 foo
-rw-rw-r--  1     0 Jul 29 15:29 out
    
por A.B. 29.07.2015 / 15:31