为shell脚本提供非交互式程序化输入

时间:2015-01-09 10:21:31

标签: rpm gnupg

我必须从JAVA触发RPM命令。该命令看起来像这样。

rpm -addsign apc.rpm

此RPM在内部调用GPG。 GPG需要一个密码,它最终会传回RPM,并且RPM会在命令行上将控制权返回给用户,等待密码。我不希望用户输入该密码。我想以某种方式将该密码提供给RPM,这样除了运行JAVA程序之外,用户不需要做任何其他事情。像下面这样提供密码没有帮助。

rpm -addsign abc.rpm -passwd

由于此密码不是RPM使用的密码,而是简单地抛出GPG所要求的密码,因此上述方法不起作用。有没有一种方法可以将文件作为后续问题的输入?

我怎么能做到这一点?任何建议都会有很大的帮助。

1 个答案:

答案 0 :(得分:2)

实际上密码 IS 是rpm读取并传递给gpg的东西。

问题是在getpass(3)中读取重新打开/ dev / tty的密码 为了关闭回声等。

所以你需要附加一个伪tty(允许传递输入) 好像是来自键盘)到/ dev / tty之前调用rpm --addsign。

简短回答:使用expect(这将完成创建/附​​加的艰苦工作 伪tty到/ dev / tty)。