在不使用 EOF 的情況下自動從 bash 腳本輸入文本
我正在執行 Ubuntu Linux。假設有一個程序叫
myprogram
. 該程序提示使用者輸入;具體來說,使用者必須在提示時輸入一個整數並按Enter
。我想使用 bash 腳本自動化這個過程。特別是,我想執行myprogram
100 次(使用i
從1
到的計數器100
)。在每次執行時myprogram
,我想i
在提示時輸入 的目前值。(順便說一下,
myprogram
接受 options/switches-options
,所有這些都是常量,因此在 bash 腳本中指定。)此 bash 腳本的不完整框架可能是:
#!/bin/bash for i in {1..100} do myprogram -options done
現在我想修改上面的程式碼,以便
i
在程序提示時輸入 的目前值。做這個的最好方式是什麼?我正在使用的軟體的網站建議
<<EOF
在行尾使用myprogram -options
。我認為這告訴 bash 查看“文件末尾”以供輸入使用。但是如果我不想將輸入放在文件末尾怎麼辦?如果我想把它緊跟在<<
or之後<
怎麼辦?原因是事情會變得更加複雜。例如,我可能會介紹一個
j
以某種非線性、非順序方式變化的整數計數器。然後,我想在每次迭代時提供 to 的目前值,但是在呼叫 to 和 end 之間的值j
可能會發生變化。myprogram``j``myprogram -options``EOF
你有什麼建議嗎?
對於幾乎所有程序,兩者都
echo $i | myprogram -options
應該myprogram -options <<<$i
工作,$i
通過標準輸入提供程序。
<foo
將使用名為foo
stdin 的文件的內容。
<<foo
將使用該文本和僅包含的行之間的文本foo
作為標準輸入。正如 Gilles 所說,這是一個here 文件(heredoc);EOF
實際上並不意味著文件的結尾,它只是一個常見的heredoc delineator(我們在這個例子中使用“foo”代替)。
<<<foo
將使用字元串“foo”作為標準輸入。您還可以指定一個變數$foo
,shell 將使用它的內容作為標準輸入,如上所示。這被稱為herestring,因為它使用一個短字元串,而不是整個塊,就像在 heredoc 中一樣。Herestrings 在 bash 中有效,但在/bin/sh
.