O Gnupg requer que muitas de suas entradas venham literalmente de um terminal em vez de apenas stdin.
Eu às vezes consigo contornar isso com:
pty-run :
#!/bin/bash
printf -v cmd '%q ' "$@"
exec script --quiet --return -f --command "$cmd" /dev/null
E então
$ { echo my-input; } | pty-run the-gpg-command
Por exemplo, posso atribuir um determinado nível de confiança, de forma não interativa, a um determinado conjunto de chaves com:
marginal=3
for k in "${keyset[@]}"; do printf '%s\n' trust "$marginal" save | pty-run gpg --edit-key "$k"; done
Mas isso falha quando as senhas são necessárias mesmo quando eu forneço as senhas no stdin.
Minha ingênua emulação do que eu acho que o comando-gpg deve fazer:
printf '%s\n' A B | pty-run bash -c ' read -s a < /dev/tty; read -s b </dev/tty; echo a=$a b=$b; '
funciona (ou seja, com pty-run
, a
e b
são atribuídos a partir de stdin mesmo quando o script bash lê diretamente do terminal de controle).
O que o gnupg está fazendo que impede que isso funcione e como posso descobrir isso?