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

标签 bash stdout

我正在尝试记录脚本执行的某些部分。日志应在第二个 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" | 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)

关于Bash 将输出重定向到 tty 和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645946/

相关文章:

python - 是否可以通过Python中的常规打开/写入来访问stdout

java - GJava中从标准输入到标准输出的压缩

C - printf 和 scanf 缓冲区

Bash 脚本 - 标准输出文件描述符?

bash - 如何在 redis-cli 参数中使用控制字符?

php - 从php函数执行python脚本?

java - RHEL 5 - 路径环境变量更改不生效

bash - 从模式匹配中删除直到下一个模式

windows - 如何在 Windows 下将 stdout 和 stderr freopen() 到一个输出文件中

Linux中的C程序: Output Redirection Performance