Bash将输出重定向到tty和文件

7

我试图记录脚本执行的某些部分。日志应该显示在第二个tty上,并写入日志文件。

我可以使用以下简单方法:

echo "Hello log" > /dev/tty2
echo "Hello log" > /var/log/my_logs

但这很不舒服。我也可以将echo重定向到特定的位置:

exec 1<>/var/log/my_logs
exec 2>&1

但是我如何将STDOUT同时重定向到/dev/tty2和/var/log/my_logs呢?

tee 命令不就可以了吗? echo "Hello log" > /dev/tty2 | tee /var/log/my_logs - fedorqui
2
@fedorqui,既然如此,您已经重定向了stdout,因此tee无法看到任何内容。 - glenn jackman
1个回答

11

使用 tee 命令。

echo "Hello log" | tee /dev/tty2 /var/log/my_logs > /dev/null
最后的重定向是为了防止输出出现在标准输出中。您也可以使用 echo "Hello log" | tee /dev/tty2 > /var/log/my_logs;两者之间没有真正的区别。tee 只是将其标准输入写入标准输出和一个或多个命名文件中。 要将所有标准输出重定向到该配对,请使用带有 exec 的进程替换。
exec > >(tee /dev/tty2 /var/log/my_logs)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接