Как упоминалось в других ответах, expect может решить эту проблему. Я закончил с чем-то вроде этого, сохранил как reprepro.exp и выполнил его с помощью chmod 755 reprepro.exp
#!/usr/bin/expect -f
set timeout 5
set passphrase "$env(SIGNING_PASSWORD)"
# Call reprepro with variable length arguments, so that this script
# takes the same arguments as the original program
spawn reprepro {*}$argv
expect {
timeout {send_error "\nFailed to get password prompt\n";
exit 1}
"Please enter passphrase*" {send -- "$passphrase\r";
send_user " *** entering passphrase ***";
exp_continue}
}
# Get the pid, spawnid, oserr and exitcode from the spawned reprepro command
set returnvalues [wait]
# Extract the reprepro exit code
set exitcode [lindex $returnvalues 3]
# Exit with the exitcode from reprepro (0 on success)
exit $exitcode
Наличие одного оператора expect означает, что это также будет работать (т. Е. Не сбой), если пароль неправильный. Затем gpg запросит кодовую фразу три раза, а reprepro вернет код выхода, который не равен 0.
Вы можете экспортировать переменную среды SIGNING_PASSWORD в ваш .bashrc или заменить ее в скрипте реальным пароль или сделать что-то еще. Используйте необходимый уровень безопасности.