2013-11-20 124 views
1

我想從腳本運行一個特定的程序,通常會讓用戶輸入一些輸入(幾次)。從多行輸入的shell腳本運行linux程序

例如,當我在shell啓動程序和我的投入將是:

t [ENTER] 
3 [ENTER] 
12 [ENTER] 
e [ENTER] 

,其中一個具有每一個程序要下一個輸入行之後等待。

我想有像

echo t | prog 
echo 3 | prog 
echo 12 | prog 
echo e | prog 

一個解決方案,但在第一行之後該程序在沒有輸入運行,因爲空的緩衝液中。我該如何解決這個問題?

回答

3

總理用例爲這裏的文檔:

prog <<EOF 
t 
3 
12 
e 
EOF 
+0

爲我工作。謝謝。 – hp7289

2

猜猜這取決於你正在使用什麼樣的外殼。與bash可以echo多行喜歡,

$ echo "t 
> 3 
> 12 
> e" | prog 
0

read命令讀取一行,由一個新行終止。您可以在您的迴音換行符:

echo "t\n3\n12\ne" | prog

+1

'echo'不處理轉義像'\ N'序列,除非'-e'選項在命令行中指定。另一種解決方案是使用'printf'。 – 2013-11-20 16:48:56

+0

'bash'內建'echo'不處理沒有'-e'選項的轉義序列,這與POSIX標準不同。我假設,像'dash'這樣的殼不需要'-e'。但是,這只是支持使用'printf'的建議。 – chepner