如何将输出重定向到多个日志文件


52

如何将标准输出重定向到多个日志文件?以下内容不起作用:

some_command 1> output_log_1 output_log_2 2>&1

6
有了zsh,就可以使用some_command >output_log_1 >output_log_2
jofel 2012年

Answers:


70

man tee

名称:tee-从标准输入读取并写入标准输出和文件

简介:tee [OPTION] ... [FILE] ...

因此:

echo test | tee file1 file2 file3

可以将stderr也重定向到多个文件中吗?
fromnaboo 2012年

是的,可以通过重定向来完成:find / -name test 2>&1 | 三通file1 file2 file3
大约

@akond, cmd 2>&1 | tee log1 log2 我尝试像上面那样执行,但是我需要按ctrl-c重定向到第二个日志文件。输出也会打印在控制台上。我希望命令输出重定向到日志,但不在控制台上。任何帮助表示赞赏。
doubledecker 2012年

@doubledecker该tee命令写入stdin文件,写入stdout。如果您不希望输出出现在终端上,则必须/dev/null像往常一样重定向到。
Minix

4
也可以附加到多个文件:echo test | tee --append file1 file2
user1364368 '16

13

假设您的输出是从一个函数生成的cmd()

cmd() {
    echo hello world!
}

要将输出重定向cmd到两个文件,而不重定向到控制台,可以使用:

cmd | tee file1 file2 >/dev/null

给定tee的任何数据源管道,这将适用于多个文件:

echo "foobarbaz" | tee file1 file2 file3 file4 > /dev/null

这也将起作用:

echo $(cmd) | tee file1 file2 >/dev/null

如果没有/dev/null重定向,那么tee 除了指定的文件,还将发送输出到stdout 。

例如,如果这是从控制台运行的,那么您将在此处看到输出。从crontab运行,输出将显示状态消息,该状态消息已发送给您(另请参见Gilles的回答https://unix.stackexchange.com/a/100833/3998)。

这对我在Ubuntu 12.04上的bash中有效,并已在Ubuntu 14.04中使用GNU bash 4.3.11(1)进行了验证,因此它应可在任何最新的GNU bash版本上使用。


@doubledecker-看起来它满足您的条件,因此可以接受作为答案。另外,我version 4.3.11(1)-release (i686-pc-linux-gnu)在Ubuntu 14.04的GNU bash()下测试了+1 。
belacqua 2014年

9

这是一个旧帖子,但我现在才发现它...

除了将输出重定向到,> /dev/null您可以将其重定向到最后一个文件:

echo "foobarbaz" | tee file1 > file2

或用于附加输出:

echo "foobarbaz" | tee -a file1 >> file2

这或多或少是其他答案所说的(-a 三通除外)
Archemar '16

这是要走的路。
71GA

5

正如@jofel在答案下方的评论中提到的那样,可以在以下本地完成此操作zsh

echo foobar >file1 >file2 >file3

或者,通过大括号扩展:

echo foobar >file{1..3}

在内部,这与tee上面提供的答案非常相似。Shell将命令的stdout连接到通过管道传输到多个文件的进程。因此,没有任何令人信服的技术优势做这种方式(但它确实看起来真正的好)。请参阅zsh手册为多。


2

无法评论,但是,另一种表达方式

echo "foobarbaz" | tee file1 file2 file3 file4 file5 file6 file7 file8 > /dev/null

在处理许多文件时,可以简化为此。

echo "foobarbaz" | tee file{1..8} > /dev/null

2
这与已经给出的其他答案有什么真正的不同?特别是因为一些人可能想字面file1通过file8他们的名字,而这些都是对文件的名称可能只是例子占位符
埃里克雷诺夫

1
无论是否可能,这正是我需要的解决方案,并认为它可以帮助其他人。
user149146
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.