2014-06-05 44 views
0

我在網上的某個地方提供了shell腳本,我想取回並在本地執行。通常我會這樣做:wget -qO- remote_script.sh | sh在本地執行遠程shell腳本時被忽略的提示

這很好,但是當腳本中有提示read -p "Prompt" yn時,它會被忽略。

什麼是最簡單和最短的解決方案?

回答

2

您需要避免該shell的stdin被用於讀取命令。試試這個:

sh <(wget -q0- remote_script.sh) 

進程替換的行爲像一個文件,所以sh的標準輸入仍應該可用於該讀取命令。

+0

啊哈,那是什麼我在想,sh的stdin在管道文件內容時可能不可用。我發現了另一個解決方案: '''sh -c「'wget -qO-remote_script.sh'」''' 哪一個更好? – Roman

+0

@Roman使用'$()'而不是'''''它可能比'<()'更好,因爲'「」'完全分配緩衝區上的整個腳本。當管道緩衝區有限時,使用'<()'下載可能會延遲,而腳本沒有讀取腳本的其他行。儘管如此,這取決於實施。 – konsolebox

+0

@羅曼我實際上建議這個答案被接受,因爲這個概念是相似的,因爲你也分享了你自己的其他答案。我給了我的+1。 – konsolebox

0

這可能是因爲您將腳本的內容傳送到sh,這是在shell中單獨發送每個命令的行。如果你的腳本是: #/斌/慶典 讀-p 「提示:」 YN 回聲$ YN

這是正在執行什麼: $讀-p 「提示:」 YN 提示:回聲$ YN $

你應該做的,而不是爲保存腳本,然後像這樣運行: $的wget -q -O myscript.sh remote_script.sh & & SH myscript.sh