Answers:
见man tee
:
名称:tee-从标准输入读取并写入标准输出和文件
简介:tee [OPTION] ... [FILE] ...
因此:
echo test | tee file1 file2 file3
cmd 2>&1 | tee log1 log2
我尝试像上面那样执行,但是我需要按ctrl-c重定向到第二个日志文件。输出也会打印在控制台上。我希望命令输出重定向到日志,但不在控制台上。任何帮助表示赞赏。
tee
命令写入stdin
文件,也写入stdout
。如果您不希望输出出现在终端上,则必须/dev/null
像往常一样重定向到。
echo test | tee --append file1 file2
假设您的输出是从一个函数生成的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版本上使用。
version 4.3.11(1)-release (i686-pc-linux-gnu)
在Ubuntu 14.04的GNU bash()下测试了+1 。
这是一个旧帖子,但我现在才发现它...
除了将输出重定向到,> /dev/null
您可以将其重定向到最后一个文件:
echo "foobarbaz" | tee file1 > file2
或用于附加输出:
echo "foobarbaz" | tee -a file1 >> file2
-a
三通除外)
无法评论,但是,另一种表达方式
echo "foobarbaz" | tee file1 file2 file3 file4 file5 file6 file7 file8 > /dev/null
在处理许多文件时,可以简化为此。
echo "foobarbaz" | tee file{1..8} > /dev/null
file1
通过file8
他们的名字,而这些都是对文件的名称可能只是例子占位符
zsh
,就可以使用some_command >output_log_1 >output_log_2
。