zshrc エクスポート GPG_TTY=$(tty) は tty ではないことを意味します。

zshrc エクスポート GPG_TTY=$(tty) は tty ではないことを意味します。

端末ウィンドウを入れてexport GPG_TTY=$(tty)再起動して実行すると、.zshrc

echo $GPG_TTY

それは言うnot a tty

私がソースを明らかにした.zshrcとき

source ~/.zshrc && echo $GPG_TTY

正しく報告されます/dev/pts/1

私のドキュメントは、ttyがインタラクティブシェルの初期化に使用されていることを示していますが、.zshrcなぜttyが見つからないのですか?.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

答え1

ttyこのコマンドを使用するには、stdinが端末に接続されている必要があります。使用するときパワーレベル10k/dev/null、stdinは次からリダイレクトされます。即時通知Zshが完全に初期化されるまで有効になります。これについての詳細はPowerlevel10k FAQ

この問題を解決するには、インスタントプロンプトを有効にする前に実行するようにexport GPG_TTY=$(tty)一番上に移動するか(より良い!)を使用できます。後者のバージョンはどこでも動作し、1000倍以上高速です。 Zshが初期化プロセスの初期に設定する特別なパラメータ。標準入力がリダイレクトされても、端末へのアクセスを提供します。~/.zshrcexport GPG_TTY=$TTYTTY

答え2

これを解決して他の人と共有しました。

export GPG_TTY=$(tty)上に移動しました。具体的には、上記のp10kインスタントプロンプトの初期化です。よくわかりませんが、スクリプトを実行した後にttyをエクスポートすると、ttyは使用できません。私はこの分野の専門家ではありませんが、私の問題は解決しました。

関連情報