通过管道将整个脚本传输到文件和终端

通过管道将整个脚本传输到文件和终端

我想要一个 1liner 同时通过管道传输到文件和终端(写入 1 个命令,然后所有其他命令都会像平常一样显示在终端中,但输出(最好但不是必须):命令名称,附加到文件)
,我知道 exec 会这样做:

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

但是现在我在终端中看不到任何东西,我怎样才能将 tee 添加到上面以使其工作,我试过了

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

- 解决方案

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

答案1

您搜索的是:

exec 1> >(tee -a $LOGFILE)

通过通道 1(标准输出)发送的每个数据都会被逐行重定向,tee附加-a到文件并打印到标准输出。

如果要重定向 stdout 和 stderr,请exec在上面第一个语句之后使用以下命令:

exec 2>&1

答案2

使用script

  1. 启动命令script
  2. 让你的活动
  3. script经停Ctrl-D
  4. 查看输出typescript

例子

% 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

使用tee

<your_command> | tee -a out

man tee

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

例子

$ 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

相关内容