sudoの入力を求められたら、Focus bashウィンドウ

sudoの入力を求められたら、Focus bashウィンドウ

私のDebianコンピュータのbashウィンドウには5分ごとに繰り返されるスクリプトがあります。ループ内のコマンドの1つがとして呼び出されますsudo。初めてスクリプトを起動するときにパスワードを入力し、次のsudo数回のループでこれを行う必要はありません。

しばらくすると、sudoパスワードの入力を求められ、スクリプトが効果的に停止します。この時間が長くなる可能性があることを知っていますが、そうしたくありません。パスワードの入力を求められた場合にのみ、bashウィンドウが集中するようにしたいと思います。可能ですか?

ベストアンサー1

コマンドがパスワードプロンプトをオンにするかどうかを事前に検出する方法はありませんが、パスワードプロンプトを返す機能をsudo利用できます(この内容を参照)。askpass回答の根拠と説明)

sudo_response=$(SUDO_ASKPASS=/bin/false sudo -A whoami 2>&1 | wc -l)
if [ $sudo_response = 2 ]; then
    # Password need to be inserted
    can_sudo=1
elif [ $sudo_response = 1 ]; then
    can_sudo=0
    # Check if currently in sudo timeout, which means no password to insert
    sudo_response=$(SUDO_ASKPASS=/bin/false sudo -A whoami 2>&1)
    # Check if `whoami` is equal to `root`      
    if [ sudo_response == "root" ]; then
        can_sudo=2
    fi
else
    echo "Unexpected sudo response: $sudo_response" >&2
    exit 1
fi
# can_sudo legend
## 0: Doesn't have sudo permission
## 1: Needs to insert password
## 2: No need to insert password

その後、can_sudo==1端末がそれをサポートして有効になっていることを確認してください。 (反応方式は端末とDEによって異なります。)

BELL次のコマンドを送信してASCII文字を使用できます。

echo -e "\a"

DEによっては、ウィンドウが点滅するか、一番上にポップアップする必要があります。

おすすめ記事