bash:使用 expect 来自动化 GPG 签名

sco*_*eus 4 bash rpm gnupg yum expect

我正在编写一个 bash 脚本,它可以在 YUM 存储库中自动签署 RPM 包。为了完成这项任务,我使用expect.

到目前为止,这是我的源代码:

/usr/bin/expect <<EOD
spawn bash -c "rpm --resign ${NEW_REPO}/packages/*.rpm"
expect "Enter pass phrase:"
send "${GPG_PASS}\r"
expect eof
EOD
Run Code Online (Sandbox Code Playgroud)

NEW_REPO是 YUM 存储库的路径,GPG_PASS是 GPG 密钥的密码。

在大多数情况下,这非常有效并且可以成功地对包进行签名。

问题:即使该目录包含 42 个包,此代码块也仅对 28-30 RPM 的包进行签名。从命令行手动签署一批 RPM 包工作正常,但expect我的脚本中的块只是在到达所有包之前停止。这是一些奇怪的怪癖expect,还是我做错了什么?欢迎提出解决方法/建议。

谢谢

Sea*_*ght 6

这可能只是超时。尝试添加:

set timeout 600
Run Code Online (Sandbox Code Playgroud)

或者,如果您想永远等待:

set timeout -1
Run Code Online (Sandbox Code Playgroud)

作为您的期望脚本的第一行。

  • 我印象深刻的是默认的 10 秒超时让它达到实际效果,但这当然是解决方案。 (2认同)