Bash将输出重定向到tty和file

Dej*_*jwi 4 bash stdout

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

我可以用一个简单的方法做到:

echo "Hello log" > /dev/tty2
echo "Hello log" > /var/log/my_logs
Run Code Online (Sandbox Code Playgroud)

但它非常不舒服.我还可以将echo重定向到特定的地方:

exec 1<>/var/log/my_logs
exec 2>&1
Run Code Online (Sandbox Code Playgroud)

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

che*_*ner 8

使用tee.

echo "Hello log" | tee /dev/tty2 /var/log/my_logs > /dev/null
Run Code Online (Sandbox Code Playgroud)

(最后的重定向是为了防止输出也出现在标准输出中.你也可以使用echo "Hello log" | tee /dev/tty2 > /var/log/my_logs;两者之间没有真正的区别.tee只需将标准输入写入标准输出和一个或多个命名文件.)

要将所有标准输出重定向到该对,请使用进程替换exec.

exec > >(tee /dev/tty2 /var/log/my_logs)
Run Code Online (Sandbox Code Playgroud)