Ale*_*lls 0 streaming pipe shell-script
这导致了问题:
node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE} &
Run Code Online (Sandbox Code Playgroud)
这有效:
node "$SUMAN_PROJECT_ROOT/server.js" &> ${LOG_FILE} &
Run Code Online (Sandbox Code Playgroud)
问题是使用第一个命令时,输出没有发送到文件。在第二个命令中,它确实被发送到文件。为什么第一个命令不起作用 - 我希望它会像第二个命令一样将输出发送到文件。bunyan 命令应该像 grep 一样,只是过滤和映射 node 命令的输出。
我的编辑不喜欢建议的解决方案:
Run Code Online (Sandbox Code Playgroud)node "$SUMAN_PROJECT_ROOT/server.js" &> ${LOG_FILE} &
首先让我们检查一下工作命令。
这表示获取命令的标准输出和标准错误node
,并将两者都重定向到日志文件。(并且您需要引用您的变量;如果 LOG_FILE 包含空格,它将中断。请参阅为什么我的 shell 脚本会因空格或其他特殊字符而阻塞?)
并且该命令被置于后台,&
但这并不是真正相关的。
Run Code Online (Sandbox Code Playgroud)node "$SUMAN_PROJECT_ROOT/server.js" | bunyan -o short &> ${LOG_FILE} &
你说的这个命令不起作用。这样做是取标准只输出的node
命令,并把它传递给bunyan
命令,那么标准输出和标准错误重定向的的bunyan
命令日志文件。
既然你说这不起作用,那么显而易见的结论是,你感兴趣的node
命令输出被发送到它的标准错误,而不是它的标准输出。使用&|
或使用node ... 2>&1 | ...
所以标准错误也被重定向。
(&|
是一种bashism,不可移植,但&>
我想你并不关心那个。)
归档时间: |
|
查看次数: |
1001 次 |
最近记录: |