Sudo
資格情報がキャッシュされているかどうかをZshプロンプトに表示したいと思います。私がこれまでに持っていることは、私が達成したいことを説明するのに役立つはずです。
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) '
問題はそれです Sudo -nl &>/dev/null
最後のSudo
呼び出しのタイムスタンプを更新するため、タイムアウトに達することはありません。それで、Sudo
がまだ私の資格情報をキャッシュしているかどうかについての情報を取得する方法はありますか、なしタイムアウト自体を更新しますか?
これは、タイムアウトに達したかどうかを判断するのに役立つようです。
Sudo-expired() [[ $(
trap "" XFSZ
limit filesize 0
LC_ALL=C Sudo -n true 2>&1) = *"password is required" ]]
つまり、タイムスタンプファイルの更新が失敗するようにファイルサイズの制限を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) '