不明白为什么 pgrep 不能在带有 sudo 的 bash 脚本中工作

不明白为什么 pgrep 不能在带有 sudo 的 bash 脚本中工作

我正在尝试检测缩放程序是否正在运行。我还需要 bash 脚本中的 sudo 权限才能使用 dpkg 安装它。

如果我使用pgrep -f "zoom" >/dev/null 2>&1,如果 Zoom 正在运行,则返回代码echo $?将被正确设置为 0,如果未找到,则返回代码将被正确设置为 1。

通过使用sudopgrep获得了两个附加进程: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

相关内容