Linux - 当文件不存在时避免使用 cat: 没有这样的文件或目录

Linux - 当文件不存在时避免使用 cat: 没有这样的文件或目录

我正在通过 bash 脚本根据文件中存储的 PID 检查进程是否正在运行。当文件不存在时,我收到上面显示的错误,因为命令正在尝试访问该文件并检查 PID 是否真的存在,所以这是正常的,但如果可能的话,我想避免这种情况。

有这样的办法吗?

我正在使用的命令如下所示。

如果杀死-0 $(cat“$pid_file”)

先感谢您。

答案1

[[ -f "$pid_file ]] && (cat "$pid_file" | head -n 1 | tr -d "\n")

此命令将返回非零状态。如果您想要“始终返回零”(牺牲易读性):

[[ ! -f "$pid_file ]] || (cat "$pid_file" | head -n 1 | tr -d "\n")

答案2

您需要一个条件来检查文件是否存在,如果您不想在尝试kill不再存在的 PID 时看到任何错误,请将其重定向stderr/dev/null。您最终会得到类似以下内容:

PID_EXISTS=$([[ -f "$pid_file" ]] && kill -0 $(<"$pid_file") 2> /dev/null && echo 1 || echo 0)

这将存储1现有的 pid 和0不存在的 pid。您可以在比较中使用该变量,例如:

if [[ $PID_EXISTS -eq 1 ]]; then echo FOUND; else echo NOTFOUND; fi

或者仅打印其结果:

echo $PID_EXISTS

cat。喵!

答案3

或者,你也可以改用pgrep

if pgrep -F "$pid_file" &>/dev/null; then
    echo yep
else
    echo nope
fi

相关内容