
Я хочу сделать что-то вроде:
echo -e "trust\n5" | gpg --edit-key "Dor"
Для того, чтобы предоставить GPG ответы, которые были даны заранее.
Но это не работает. Есть идеи?
решение1
echo -e "trust\n5" | gpg --edit-key "Dor"
не работает, так как gpg
не читает ответы из stdin
, а открывает их /dev/tty
напрямую для чтения.
Это можно обойти с помощьюexpect
, инструмент для автоматизации интерактивных приложений.
решение2
Как ответил Томас Найман, решение заключается в использовании expect
или аналогичного инструмента.
К сожалению, expect
может быть сложным в изучении и использовании, и это существенная инвестиция времени и усилий, чтобы изучить язык, который можно использовать только для одной задачи. Вы можете обнаружить, что проще — и полезнее в долгосрочной перспективе — использовать Perl или Python, оба из которых имеют библиотеки, которые можно использовать для того же, что и expect
.
Для Perl это будетОжидать.pm
Для Python взгляните наpожидать
Оба они, вероятно, уже упакованы для вашего дистрибутива Linux — например, в Debian это libexpect-perl
и python-pexpect
.
Кстати, хотя это и не имеет прямого отношения к вашему вопросу, стоит отметить, что в Perl также есть библиотеки/модули, разработанные специально для выполнения expect
подобных вещей через сетевые соединения, например perl Net::SSH
и Net::Telnet
модули. У Python есть похожие библиотеки.