2015-11-05 109 views
0

我有一個返回以下純文本端點:bash腳本暫停,同時命令等待標準輸入

openssl genrsa -out server.key 2048 
openssl req -new -sha256 -key server.key -out server.csr 

但我跑得像這樣經過:

curl -sSf https://.../ | bash - 

它要求Country Name (2 letter code) [XX]:但隨後立即運行導致錯誤的第二個命令並返回到提示符。我如何讓它等待用戶輸入命令1所要求的所有字段,然後運行命令2?

我這樣做的原因是因爲我正在創建一個從curl調用中讀取純文本並將其管理爲bash的服務;一種來自遠程資源的自動化腳本。

+0

會如果以發佈方式執行,自動暫停stdin。也許你以這樣的方式調用它,stdin不可用於等待? –

+0

對不起,我留下了一些重要的東西。更新問題。 – brian

+0

標準輸入在本例中是由bash使用的。告訴我們爲什麼你以這種扭曲的方式運行腳本。 – 4ae1e1

回答

3

當腳本的內容傳入bash時,stdin連接到管道而不是tty,所以腳本無法從tty讀取,實際上不能從stdin中爲任何事情擠出任何東西(將總是得到EOF),因爲stdin已經被bash用盡了。它可以通過關閉和重新連接到腳本中標準輸入多次耗盡(例如,見this question),但對於任何生成的腳本的內容,你可以隨時使用進程替換釋放標準輸入:

bash <(curl -sSL http://git.io/vlhFL) 
+0

謝謝,我需要的確切解決方案。 – brian