我正在运行一个名为热诚(从src编译)的GUI程序,并为可执行文件添加一个脚本(zeal.sh):
#!/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),它们运行良好。
那么,这是如何发生的,以及如何解决呢?
发布于 2014-11-06 04:41:21
问题在于,直接调用使脚本名称成为命令名,请参见
cat /proc/$PID/comm这将导致pgrep匹配。如果通过bash调用,则命令名为"bash“。
使用
pgrep --exact zeal而不是。
发布于 2015-12-02 03:35:33
豪克在回答中提出的长期选择--exact在某些系统上不起作用。您可以使用等效的卖空选项-x。
#!/bin/bash
if pgrep -x "zeal" > /dev/null
then
echo "Running"
else
echo "Stopped"
fihttps://unix.stackexchange.com/questions/166299
复制相似问题