Arch-Linux

zshrc export GPG_TTY=$(tty) 表示不是 tty

  • December 31, 2020

我正在嘗試使用 gpg 設置 git commit 簽名。我已經正確設置了一切。我唯一的問題是當我輸入export GPG_TTY=$(tty).zshrc重新啟動一個新的 Konsole 視窗並輸入echo $GPG_TTY時,它說not a tty。當我通過 put然後 echo.zshrc從同一視窗再次獲取我的資訊時,它會正確報告。當它的文件說用於互動式 shell 初始化時,我找不到 tty 可能是什麼原因。source ~/.zshrc``$GPG_TTY``/dev/pts/1``.zshrc``zshrc

這是我的 .zshrc 內容:

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.

if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
 source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

export ZSH="/home/ashar/.oh-my-zsh"
export EDITOR=nvim
export GPG_TTY=$(tty)

ZSH_THEME="powerlevel10k/powerlevel10k"

plugins=(git zsh-autosuggestions)
source $ZSH/oh-my-zsh.sh

# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

tty命令要求標準輸入連接到終端。使用Powerlevel10k時,stdin 會從Instant Prompt/dev/null啟動時重定向到 Zsh 完全初始化。這在Powerlevel10k FAQ中有更詳細的解釋。

要解決此問題,您可以移動export GPG_TTY=$(tty)到頂部~/.zshrc以便它在 Instant Prompt 啟動之前執行,或者(更好!)使用export GPG_TTY=$TTY. 後一個版本可以在任何地方工作,而且速度要快 1000 倍以上。TTY是 Zsh 在初始化時很早就設置的特殊參數。即使標準輸入可能被重定向,它也可以讓您訪問終端。

引用自:https://unix.stackexchange.com/questions/608842