1

Gnupg требует, чтобы многие его входные данные поступали буквально из терминала, а не из стандартного ввода.

Я иногда могу обойти это с:

pty-run:

#!/bin/bash
printf -v cmd '%q ' "$@"
exec script --quiet --return -f --command "$cmd" /dev/null

А потом

$ { echo my-input; } | pty-run the-gpg-command

Например, я могу неинтерактивно назначить определенный уровень доверия определенному набору ключей с помощью:

marginal=3
for k in "${keyset[@]}"; do printf '%s\n' trust "$marginal" save | pty-run gpg --edit-key "$k"; done

Но это не удается, когда требуются пароли, даже если я предоставляю пароли на стандартном компьютере.

Моя наивная эмуляция того, что, я думаю, должна делать команда -gpg:

printf '%s\n' A B | pty-run bash -c ' read -s a < /dev/tty; read -s b </dev/tty; echo a=$a b=$b; '

работает (т. е. с pty-run , a и b назначаются из stdin, даже когда скрипт bash читает непосредственно с управляющего терминала).

Что делает gnupg, чтобы это не работало и как я могу это выяснить?

0