我在 bash 脚本中有一个函数,如果进程正在运行我想返回 true,否则返回 false。我的功能代码是:
checkProcess() {
if [ kill -s 0 $(getPid) > /dev/null 2>&1 ]; then
return 0
else
return 1
fi
}
当我使用这个功能时,它似乎不起作用。我这样使用它:
if [ ! checkProcess ]; then
#do something, like rm file containing PID
fi
但是,如果我只使用下面的实现,它工作正常:
if [ ! kill -s 0 $(getPid) > /dev/null 2>&1 ]; then
#do something, like rm file containing PID
fi
这是有原因的吗?我没有在我的函数中返回正确的值吗?还是这一切都被错误地实现了?
最佳答案
[
不是语法;这是一个命令。它通常与 if
一起使用,它根据其返回码工作。
直接检查不同命令的返回码,例如kill
,你应该删除[
和]
([
的最后一个参数):
if kill -s 0 $(getPid) &>/dev/null; then
# ...
fi
请注意,&>
是 Bash 扩展,等同于 >/dev/null 2>&1
。
关于BASH:如何从函数中正确返回 true 和 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31339932/