管道到文件不适用于中间管道

管道到文件不适用于中间管道

这会导致问题:

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &

这有效:

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 

问题是第一个命令的输出没有发送到文件。在第二个命令中,它确实被发送到文件。为什么第一个命令不起作用 - 我希望它会像第二个命令一样将输出发送到文件。 Bunyan 命令应该像 grep 一样,只是过滤和映射节点命令的输出。

我的编辑不喜欢提议的解决方案:

在此输入图像描述

答案1

node "$SUMAN_PROJECT_ROOT/server.js"  &> ${LOG_FILE}  & 

首先让我们检查一下工作命令。

这表示获取node命令的标准输出和标准错误,然后重定向两个都到日志文件。 (并且您需要引用您的变量;如果 LOG_FILE 包含空格,它将中断。请参阅为什么我的 shell 脚本会因为空格或其他特殊字符而卡住?

该命令被放在后台,&但这并不真正相关。

node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE}  &

你说的这个命令不起作用。其作用是仅获取node命令的标准输出并将其传递给bunyan命令,然后重定向标准输出和标准错误bunyan命令的到日志文件。

既然你说这不起作用,那么明显的结论是你感兴趣的命令输出node正在发送到其标准错误,不是它的标准输出。使用&|或使用node ... 2>&1 | ...所以标准错误也被重定向。

&|是一种羞辱,不可移植,但&>我想你并不关心这一点。)

相关内容