Por que o gnupg não será enganado pelo meu truque do pseudoterminal?

1

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?

    
por PSkocik 11.04.2016 / 23:01

0 respostas