我的 Debian 机器上的 bash 窗口中有一个脚本每五分钟循环一次。循环中的命令之一被调用为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