Dav*_*vid 6 io-redirection shell-script
在我的脚本中,我目前有:
exec > >(tee -a /tmp/history.log) 2>&1
Run Code Online (Sandbox Code Playgroud)
这会将所有命令的 stderr 和 stdout 写入日志文件和 tty。不幸的是,这使得 tty 非常嘈杂,所以我宁愿在终端上只有 stdout,而在文件中同时包含 stdout 和 stderr (按正确的顺序,因此打开文件两次进行追加将不起作用)。对于我的一生,我无法弄清楚tee /dev/tty让它工作所需的神奇 exec 调用(甚至使用 )。
tee不能直接输出到文件描述符,但可以使用进程替换来cat解决:
exec 3>&1 &>log 1> >(tee >(cat >&3))
Run Code Online (Sandbox Code Playgroud)
因此,stdout 通过 fd3 进入输出,并且 stdout 和 stderr 都进入日志。