Gnupg 要求它的许多输入实际上来自终端而不是仅仅来自标准输入。
我有时可以这样解决这个问题:
pty-运行:
#!/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
,即使 bash 脚本直接从控制终端读取,a
也b
可以从 stdin 分配)。
gnupg 做了什么导致它无法工作以及我该如何解决?