首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >防止在输入不匹配时grep返回错误

防止在输入不匹配时grep返回错误
EN

Stack Overflow用户
提问于 2011-07-02 00:13:15
回答 3查看 35K关注 0票数 79

我想在bash脚本中编写一段代码来检查程序是否已经在运行。为了搜索bar是否正在运行,我有以下内容

代码语言:javascript
复制
 foo=`ps -ef | grep bar | grep -v grep`

这个

代码语言:javascript
复制
 grep -v grep

部分是为了确保ps结果中不考虑"grep bar“

当bar没有运行时,foo正确地为空。但我的问题在于这个脚本

代码语言:javascript
复制
 set -e

这是一个标志,用于在某个命令返回错误时终止脚本。结果是,当bar没有运行时,"grep -v grep“不匹配任何内容,grep返回一个错误。我尝试使用-q或-s,但都无济于事。

有什么解决方案吗?Thx

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-02 00:17:49

当然:

代码语言:javascript
复制
ps -ef | grep bar | { grep -v grep || true; }

或者甚至是:

代码语言:javascript
复制
ps -ef | grep bar | grep -v grep | cat
票数 79
EN

Stack Overflow用户

发布于 2011-07-02 01:08:14

如果你只打算丢弃99%的输出,为什么要让ps-ef提供大量的输出呢?ps,尤其是GNU版本,是一把方便功能的瑞士军刀。试试这个:

代码语言:javascript
复制
ps -C bar -o pid= 1>/dev/null

我在这里指定-o pid=只是因为,但实际上它是没有意义的,因为我们无论如何都会丢弃所有的stdout。但是,如果您想知道实际运行的PID,它将非常有用。

如果-C无法匹配任何内容,则ps将自动返回非零的exist状态,如果匹配,则返回零。所以你可以简单地说

代码语言:javascript
复制
ps -C bar 1>/dev/null && echo bar running || echo bar not running

代码语言:javascript
复制
if ps -C bar 1>/dev/null ; then
    echo bar running
else
    echo bar not running
fi

这不是更简单吗?不需要grep,不需要两次甚至一次。

票数 10
EN

Stack Overflow用户

发布于 2011-07-02 00:19:17

代码语言:javascript
复制
foo=`ps -ef | grep bar | grep -v grep` || true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6550484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档