2015-07-10 97 views
1

我正在寫一個bash腳本,它可以在YUM存儲庫中自動執行RPM軟件包的簽名。爲了完成這個任務,我使用expectbash:使用expect來自動執行GPG簽名

這是到目前爲止我的源代碼:

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

NEW_REPO是路徑YUM回購,並GPG_PASS是GPG密鑰的密碼。

大多數情況下,這種方式運行良好,並且成功地簽署了包。

問題:即使該目錄包含42個軟件包,此代碼塊也只能在28-30 RPM軟件包之間簽名。從命令行手工簽署一批RPM軟件包可以很好地工作,但腳本中的expect塊只是在到達所有軟件包之前停止。這是一些奇怪的expect怪癖,還是我在做一些完全錯誤的事情?我們歡迎解決方法/建議。

謝謝

回答

3

它可能只是超時。嘗試添加:

set timeout 600 

或者,如果你想永遠等待:

set timeout -1 

作爲腳本的第一行。

+0

你是指「expect」塊的第一行,還是在「expect」塊之前的bash腳本中? – scottyseus

+2

令我印象深刻的是,10秒的默認超時讓它儘可能地達到它的效果,但這當然是解決方案。 –

+0

您期望的區塊的第一行。 –

0

而不是使用期望,你可以使用gpg-agent,這將允許你不需要每次輸入密碼的GPG簽名的東西。您可以設置很長的到期時間,以便您可以簽署許多內容,並且只能定期重新輸入密碼。

這比以類似的腳本以純文本格式存儲GPG密鑰更安全得多。