首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确使用bash脚本中的pgrep?

如何正确使用bash脚本中的pgrep?
EN

Unix & Linux用户
提问于 2014-11-06 03:39:56
回答 2查看 20.4K关注 0票数 8

我正在运行一个名为热诚(从src编译)的GUI程序,并为可执行文件添加一个脚本(zeal.sh):

代码语言:javascript
复制
#!/bin/bash

if pgrep zeal &>/dev/null; then
    printf "already on\n"
else
    ~/tools/zeal/zeal/zeal &>/dev/null &
fi

奇怪的是,当我像/path/to/zeal.sh一样运行这个脚本时,它总是告诉我“已经启动”,而对于bash /path/to/zeal.sh,它正确地决定进程是否正在运行。

我还检查了具有类似脚本的其他GUI程序(如firefox),它们运行良好。

那么,这是如何发生的,以及如何解决呢?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2014-11-06 04:41:21

问题在于,直接调用使脚本名称成为命令名,请参见

代码语言:javascript
复制
cat /proc/$PID/comm

这将导致pgrep匹配。如果通过bash调用,则命令名为"bash“。

使用

代码语言:javascript
复制
pgrep --exact zeal

而不是。

票数 3
EN

Unix & Linux用户

发布于 2015-12-02 03:35:33

豪克在回答中提出的长期选择--exact在某些系统上不起作用。您可以使用等效的卖空选项-x

代码语言:javascript
复制
#!/bin/bash

if pgrep -x "zeal" > /dev/null
then
    echo "Running"
else
    echo "Stopped"
fi
票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/166299

复制
相关文章

相似问题

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