【发布时间】:2012-11-01 19:05:15
【问题描述】:
在 bash 脚本中,
回显“错误”1>&2 | tee -a 日志
会在屏幕上打印 stderr 但没有日志到文件,如何同时执行这些操作?
【问题讨论】:
标签: bash
在 bash 脚本中,
回显“错误”1>&2 | tee -a 日志
会在屏幕上打印 stderr 但没有日志到文件,如何同时执行这些操作?
【问题讨论】:
标签: bash
但默认只有标准输出在管道中传递,所以在
$ echo "error" | tee
tee 只能看到来自echo 的粗壮,而不是标准错误。 stderr 仍会显示在终端中。
【讨论】:
echo "error" 1>&2 | tee -a log
对于第一部分1>&2,您的意思是:“将标准输出重定向到标准错误”。所以 echoed 输出 "error" 进入 stderr。
管道 (|) 仅从 stdout 读取,而不是从 stderr 读取。所以tee 根本没有从管道中得到任何stdin。因此,它不会向日志文件附加任何内容。
【讨论】:
2>&1 是正确的。
echo "error" 2>&1 | tee -a log。现在两个 stderr 也将转到 stdout,您可以在屏幕上看到它们,并且还会附加到日志中。
stdout。你是对的,2>&1 不会向标准错误写入任何内容。但是由于 stdout 和 stderr 都去控制台,你真的不需要担心。
要在控制台上查看 stdout 和 stderr 并将两个流都发送到日志,请将 stderr 重定向到 stdout,如下所示:
progam.sh 2>&1 | tee -a log
【讨论】:
要将文本回显到日志文件和标准错误,而不是标准输出,试试这个:
echo "error" | tee -a log 1>&2
【讨论】:
echo,但是对tee 命令执行此操作非常有效,谢谢!