我有一个简单的 bash 脚本,用于检查程序是否正在运行并执行相应的操作。
#!/bin/bash
check_running=$(pgrep -x redshift)
if [[ -n "$check_running" ]]; then
echo "1"
else
echo "0"
fi
如果我正常执行脚本 (./script) 那么它将始终返回 1。但是如果我使用“bash -x script”那么它会返回正确的结果
❯ bash -x redshift
++ pgrep -x redshift
+ check_running=
+ [[ -n '' ]]
+ echo 0
0
我有一个类似的脚本检查 openvpn 是否正在运行,并且它通过常规执行返回正确的值。
这是完整的:
~/.config/polybar/scripts
❯ pgrep -x redshift
~/.config/polybar/scripts
❯ ./redshift
1
~/.config/polybar/scripts
❯ bash -x redshift
++ pgrep -x redshift
+ check_running=
+ [[ -n '' ]]
+ echo 0
0
我究竟做错了什么?
答案1
当您运行 时./redscript
,pgrep -x redscript
将匹配该脚本的进程,因此check_running
将有一个 PID。您可以set -x
在脚本中放入 a ,或用作#! /bin/bash -x
shebang 来验证这一点。