我想要一个 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
- 启动命令
script
- 让你的活动
script
经停Ctrl-D- 查看输出
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