我希望我的 Zsh 提示显示我的sudo
凭据是否已缓存。到目前为止,我所拥有的应该有助于解释我想要实现的目标。
function sudo-warning {
if sudo -nl &>/dev/null; then
echo -n " %{${fg[red]}%}%{$reset_color%}"
# optionally, show a locked lock if no sudo credentials active
#else
# echo -n " %{${fg[blue]}%}%{$reset_color%}"
fi
}
# Update prompt every 10 seconds
TMOUT=10
TRAPALRM() {
zle reset-prompt
}
PROMPT='%n$(sudo-warning) '
Run Code Online (Sandbox Code Playgroud)
问题是sudo -nl &>/dev/null
更新上次sudo
调用的时间戳,因此永远不会超时。那么,有没有办法在不更新超时本身的情况下获取有关是否sudo
仍然缓存我的凭据的信息?
这似乎对我来说可以判断是否达到超时:
sudo-expired() [[ $(
trap "" XFSZ
limit filesize 0
LC_ALL=C sudo -n true 2>&1) = *"password is required" ]]
Run Code Online (Sandbox Code Playgroud)
也就是说,将文件大小限制设置为 0 会使时间戳文件的更新失败,但只要我们不让该限制终止sudo
,我们仍然能够判断是否需要密码。
像你一样使用(有一些简化):
sudo-warning()
if sudo-expired; then
echo '%F{blue}%f'
else
echo '%F{red}%f'
fi
TMOUT=10
TRAPALRM() zle reset-prompt
set -o promptsubst
PS1='%n$(sudo-warning) '
Run Code Online (Sandbox Code Playgroud)