bash -x が動作しているときに文が誤った結果を返す場合の Bash スクリプト

bash -x が動作しているときに文が誤った結果を返す場合の Bash スクリプト

プログラムが実行されていることを確認し、適切なタスクを実行する単純な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_runningPIDが生成されます。set -xスクリプトに入れるか、それを確認するためにshebangとして使用できます#! /bin/bash -x

関連情報