使用带有grep的-q标志时,Ubuntu出现EPIPE错误

时间:2016-03-27 22:44:35

标签: linux bash grep

我有一个bash脚本,用于检查某些永久进程是否正在运行。该脚本基本上是:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: write EPIPE
    at errnoException (net.js:904:11)
    at Object.afterWrite (net.js:720:19)

我收到此错误:

$(document).ready(function() {
    var language = "en";
    if (localStorage.getItem("language") != null)
        language = localStorage.getItem("language");

    i18n.init({
        lng: language,
        resStore: resources,
        fallbackLng: "en"
    }, function(o) {
        $(document).i18n()
    }), $(".lang").click(function() {
        var o = $(this).attr("data-lang");

        localStorage.setItem("language", o);

        i18n.init({
            lng: o
        }, function(o) {
            $(document).i18n()
        })
    })
});

如果我从第3行的grep命令中删除'-q'标志,那么我没有收到管道错误,但是我得到一个错误,它试图将grep结果作为命令运行而不是仅仅检查输出的长度大于0。 有谁知道为什么-q参数会导致EPIPE错误?

基于评论的更新: 我的错误,我对bash很新,并试图学习如何使用if语句。我最初直接在if语句中使用它,但是把它带到变量中因为它不起作用(事实证明它失败了,因为我没有空格,没有意识到它们是bash的要求)。我显然没有正确地移除它。我目前只使用grep而不使用-q,然后检查输出的长度,这样做效果很好。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

forever list | grep -q 'process/index.js'
if [ $? -eq 0 ]; then
    echo 'Processes are running'
else 
    echo 'Processes are not running'
fi

grep -q表示不要向标准输出写任何内容。

$?用于查找上次执行的命令的返回值。