zshrc export GPG_TTY = $ (tty) diz que não é tty

Sep 10 2020

Estou tentando configurar a assinatura do git commit usando gpg. Eu configurei tudo corretamente. O único problema que tenho é quando coloco export GPG_TTY=$(tty)no meu .zshrce reinicio uma nova janela do Konsole e coloco echo $GPG_TTY, diz ele not a tty. Quando eu novamente obtenho meu .zshrcda mesma janela, colocando source ~/.zshrce, em seguida $GPG_TTY, echo , ele informa corretamente /dev/pts/1. O que pode ser que eu .zshrcnão consiga encontrar o tty quando sua documentação diz que ele zshrcé usado para inicialização do shell interativo.

Aqui está o meu conteúdo .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

Respostas

9 RomanPerepelitsa Sep 11 2020 at 07:28

ttycomando requer que stdin esteja anexado a um terminal. Ao usar o Powerlevel10k , stdin é redirecionado de /dev/nullquando o prompt instantâneo é ativado e até que o Zsh seja totalmente inicializado. Isso é explicado com mais detalhes no FAQ do Powerlevel10k .

Para resolver esse problema, você pode mover export GPG_TTY=$(tty)para o topo de ~/.zshrcpara que seja executado antes que o prompt instantâneo seja ativado ou (melhor!) Usar export GPG_TTY=$TTY. A última versão funcionará em qualquer lugar e é mais de 1000 vezes mais rápida. TTYé um parâmetro especial definido por Zsh muito cedo durante a inicialização. Ele fornece acesso ao terminal mesmo quando stdin pode ser redirecionado.

2 coder3101 Sep 10 2020 at 18:37

Eu resolvi isso, apenas compartilhando com outras pessoas.

Mudei export GPG_TTY=$(tty)para o topo. Especificamente acima da inicialização do prompt instantâneo p10k. Não sei, mas se eu exportar o tty depois que o script for executado, o tty não estará disponível. De qualquer forma, não sou um especialista na área, mas isso apenas resolve o problema para mim e espero que resolva para você também.