Resposta curta
Se você estiver usando bash, o script wrapper de Chris W. é o caminho a seguir. Se por acaso você estiver usando zsh, então você pode explorar o script de inicialização ~/.zshenv
para definir GPG_TTY
, não há necessidade de um wrapper. Desde bash não tem um script de inicialização similar (cf. Bash Startup Files ), você terá que usar o wrapper lá.
export GPG_TTY=${TTY}
Alguns antecedentes: camadas interativas e não interativas
O gpg-agent espera que GPG_TTY
aponte para o tty de onde é invocado, de modo que possa exibir seus prompts de frase secreta de maneira segura. O manual do GnuPG sugere colocar o seguinte em ~/.bashrc
(ou similar):
GPG_TTY=$(tty)
export GPG_TTY
Se você invocar o mutt diretamente do seu shell, isso funcionará: GPG_TTY
será definido, o mutt irá buscá-lo e passá-lo para o gpg quando for necessário.
No entanto, quando você inicia o comando mutt via new-window
do tmux ou construções similares, há uma diferença importante: antes, seu mutt estava em um chamado shell interativo —isto é, você tinha um prompt do shell aberto e lançava o mutt a partir dele mesmo. tmux new-window
lança um shell não interativo , já que seu shell é necessário apenas para iniciar o mutt e você não poderá interagir com ele. Nesse caso, o banho não lerá .bash_profile
ou .bashrc
, já que eles são projetados para configurar seu shell para uso interativo.
O zsh faz praticamente a mesma coisa: .zshrc
é lido para shells interativos e ignorado para não-interativos. No entanto, em zsh, você pode fornecer um terceiro arquivo de inicialização , .zshenv
, que é lido para < em> every shell, não importa se é interativo ou não. Portanto, se você definir GPG_TTY
de lá, estará sempre disponível, independentemente de como o mutt é iniciado. E como $TTY
é uma variável interna do shell que sempre aponta para o tty atual, é possível evitar a sobrecarga de gerar um processo tty
sempre que o shell aparecer.