如何将 bash 脚本的 sdterr 重定向到控制台和文件?我在用:
exec 2>> myfile
将其记录到 myfile。如何将其扩展为也登录到控制台?
例如:
exec 2>&1 | tee myfile
或者你可以使用tail -f
$ touch myfile
$ tail -f myfile &
$ command 2>myfile
尝试在后台通过另一个命令(如 cat)打开该文件。
exec 2>> myfile
cat myfile & >&2
CAT_PID=$!
... # your script
kill $CAT_PID
你可以创建一个fifo
$ mknod mypipe p
让 tee 从 fifo 读取。它写入标准输出和您指定的文件
$ tee myfile <mypipe &
[1] 17121
现在运行命令并将 stderr 传输到 fifo
$ ls kkk 2>mypipe
ls: cannot access kkk: No such file or directory
[1]+ Done tee myfile < mypipe
您可以将输出重定向到一个进程并tee
在该进程中使用:
#!/usr/bin/env bash
exec 2> >( tee -a err.log )
echo bla >&2
基于@mpapis 回答的纯 Bash 解决方案:
exec 2> >( while read -r line; do printf '%s\n' "${line}" >&2; printf '%s\n' "${line}" >> err.log; done )
并扩展:
exec 2> >(
while read -r line; do
printf '%s\n' "${line}" >&2
printf '%s\n' "${line}" >> err.log
done
)