RUNNING_APPS=$(pgrep -f "somePattern")
echo $?
#results in
1
如何使我的命令通过退出代码 0?
答案1
在我的 Arch 系统上,通过pgrep
from procps-ng
,我在以下位置看到了这一点man pgrep
:
EXIT STATUS
0 One or more processes matched the criteria. For
pkill the process must also have been success‐
fully signalled.
1 No processes matched or none of them could be
signalled.
2 Syntax error in the command line.
3 Fatal error: out of memory etc.
所以情况就是这样:pgrep
如果一切正常但没有与搜索字符串匹配的进程,将以 1 退出。这意味着您将需要使用不同的工具。也许像 Kusalananda 在评论中建议的那样ilkkachu 作为答案发布:
running_apps=$(pgrep -f "somePattern" || exit 0)
但在我看来,更好的方法是更改脚本。不要使用 ,而是set -e
在重要步骤处手动退出。然后,你可以使用这样的东西:
running_apps=$(pgrep -fc "somePattern")
if [ "$running_apps" = 0 ]; then
echo "none found"
else
echo "$running_apps running apps"
fi
答案2
对于AND ( ) 或 OR ( ) 运算set -e
符左侧的 , 命令不会导致 shell 退出,因此您可以通过添加 来抑制错误。&&
||
|| true
因此,0
无论找到哪个进程,都应该输出(并且在输出之前不退出):
set -e
RUNNING_APPS=$(pgrep -f "somePattern" || true)
echo $?