web-dev-qa-db-ja.com

Sudoタイムアウト情報でZshプロンプトを更新する

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がまだ私の資格情報をキャッシュしているかどうかについての情報を取得する方法はありますか、なしタイムアウト自体を更新しますか?

6
timothymctim

これは、タイムアウトに達したかどうかを判断するのに役立つようです。

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) '
2