Eu encontrei a causa raiz do problema. O gpg-agent deve definir automaticamente $ GPG_AGENT_INFO durante a chamada, mas não está definindo a variável env. Da mesma forma, o arquivo gpg-agent.info não estava presente, como mencionado no post acima, portanto, o código acima não estava funcionando. De acordo com a documentação do gpg, o GPG_AGENT_INFO deve apontar para o arquivo de soquete do gpg-agent seguido pelo pid do gpg-agent e depois pelo protocolo (padrão 1). Esses três campos devem ser separados por dois pontos.
Então eu coloquei o seguinte código no meu ~ / .profile para resolver o problema (o arquivo S.gpg-agent é o arquivo de soquete criado pelo gpg-agent depois que ele inicia), Código:
if (pgrep -u "${USER}" gpg-agent); then
export GPG_AGENT_PID='pgrep -u ${USER} gpg-agent'
export GPG_AGENT_INFO=${HOME}/.gnupg/S.gpg-agent:${GPG_AGENT_PID}:1
else
eval 'gpg-agent --enable-ssh-support --daemon'
export GPG_AGENT_PID='pgrep -u ${USER} gpg-agent'
export GPG_AGENT_INFO=${HOME}/.gnupg/S.gpg-agent:${GPG_AGENT_PID}:1
fi
Ainda não sei por que o gpg-agent não pode definir o GPG_AGENT_INFO.