Bash 脚本 if 语句在 bash -x 工作时返回错误结果

Bash 脚本 if 语句在 bash -x 工作时返回错误结果

我有一个简单的 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

当您运行 时./redscriptpgrep -x redscript将匹配该脚本的进程,因此check_running将有一个 PID。您可以set -x在脚本中放入 a ,或用作#! /bin/bash -xshebang 来验证这一点。

相关内容