【发布时间】:2016-03-27 22:44:34
【问题描述】:
我有一个 bash 脚本,用于检查某些永久进程是否正在运行。脚本基本上是:
#!/bin/bash
processIsRunning=$(forever list | grep -q 'process/index.js')
if [ -n $processIsRunning]; then
echo 'Processes are running'
else
echo 'Processes are not running'
fi
我得到了这个错误:
events.js:72
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at errnoException (net.js:904:11)
at Object.afterWrite (net.js:720:19)
如果我从第 3 行的 grep 命令中删除了“-q”标志,那么我不会收到管道错误,而是会收到一个错误,提示它尝试将 grep 结果作为命令运行,而不是仅仅检查输出的长度大于 0。 有谁知道为什么 -q 参数会导致 EPIPE 错误?
根据评论更新: 我的错误,我对 bash 很陌生,并且正在尝试学习如何使用 if 语句。我最初将它直接放在 if 语句中,但因为它不起作用(结果它失败了,因为我没有空格,没有意识到它们是 bash 中的要求)。我显然没有正确地将其移植出来。我目前只使用不带 -q 的 grep,然后检查输出的长度,效果很好。
【问题讨论】:
-
首先,
grep -q不输出任何内容,因此尝试通过$(...)捕获其输出是没有意义的。使用方式类似于if forever list | grep -q 'process/index.js'; then -
第二,我无法重现问题 -
forever list是否成功完成写入终端,一个没有-q的grep进程,一个带有-q的grep进程,一个文件..