![不明白为什么 pgrep 不能在带有 sudo 的 bash 脚本中工作](https://linux22.com/image/198807/%E4%B8%8D%E6%98%8E%E7%99%BD%E4%B8%BA%E4%BB%80%E4%B9%88%20pgrep%20%E4%B8%8D%E8%83%BD%E5%9C%A8%E5%B8%A6%E6%9C%89%20sudo%20%E7%9A%84%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%B7%A5%E4%BD%9C.png)
我正在尝试检测缩放程序是否正在运行。我还需要 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