zshrc export GPG_TTY = $ (tty) tty가 아님
gpg를 사용하여 git commit signing을 설정하려고합니다. 모든 것을 올바르게 설정했습니다. 내가 가진 유일한 문제는 내가 넣기 export GPG_TTY=$(tty)에 .zshrc새 Konsole 창을 다시 시작하고 넣을 echo $GPG_TTY때 not a tty입니다. 다시 .zshrc넣어 같은 창에서 내 소스 를 넣은 source ~/.zshrc다음 에코 $GPG_TTY하면 올바르게보고 /dev/pts/1됩니다. .zshrc문서 zshrc에서 대화식 쉘 초기화에 사용 된다고 말할 때 tty를 찾지 못하는 것은 무엇 일 수 있습니다 .
내 .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명령을 사용하려면 stdin이 터미널에 연결되어 있어야합니다. Powerlevel10k를 사용 /dev/null하면 인스턴트 프롬프트 가 활성화 될 때부터 Zsh가 완전히 초기화 될 때까지 stdin이 리디렉션됩니다 . 이것은 Powerlevel10k FAQ 에 더 자세히 설명되어 있습니다 .
이 문제를 해결하려면 Instant Prompt가 활성화되기 전에 실행되도록 export GPG_TTY=$(tty)맨 위로 이동 ~/.zshrc하거나 export GPG_TTY=$TTY. 후자의 버전은 어디서나 작동하며 1000 배 이상 빠릅니다. TTY초기화 중에 Zsh가 매우 일찍 설정 한 특수 매개 변수입니다. stdin이 리디렉션 될 때도 터미널에 액세스 할 수 있습니다.
나는 그것을 다른 사람들과 공유하면서 그렇게 해결했습니다.
나는 export GPG_TTY=$(tty)위로 이동했다 . 특히 p10k 인스턴트 프롬프트 초기화 위에 있습니다. 모르겠지만 해당 스크립트가 실행 된 후 tty를 내 보내면 tty를 사용할 수 없습니다. 어쨌든, 나는 그 분야의 전문가는 아니지만 그것은 나를 위해 문제를 해결하고 당신에게도 도움이되기를 바랍니다.