我正在尝试检测缩放程序是否正在运行。我还需要 bash 脚本中的 sudo 权限才能使用 dpkg 安装它。
如果我使用pgrep -f "zoom" >/dev/null 2>&1
,如果 Zoom 正在运行,则返回代码echo $?
将被正确设置为 0,如果未找到,则返回代码将被正确设置为 1。
通过使用sudo
,pgrep
获得了两个附加进程:sudo pgrep etc.
第一个进程和第一个进程pgrep etc.
的子进程sudo
。这不起作用,所以我不得不使用“黑客解决方法”:sudo pgrep -f "[z]oom" >/dev/null 2>&1
成功了:正则表达式确保pgrep
进程不会添加到结果中。
现在,如果进程未运行,则设置为 1;如果进程正在运行,则设置为 0 sudo pgrep -f "[z]oom" >/dev/null 2>&1 ;
。echo $?
完美的。
但是当我将其添加到我的 bash 脚本(我用它运行sudo
)中时:
if pgrep -f "[z]oom" 2>&1 ; then
echo $?
echo "zoom is running"
这不再有效并且它总是表示缩放进程正在运行(因此即使缩放正在运行,它也始终返回 0不是跑步)。
这是为什么?
答案1
问题是-f
.只需使用
pgrep -x zoom >/dev/null 2>&1