Linux

在不使用 EOF 的情況下自動從 bash 腳本輸入文本

  • June 2, 2016

我正在執行 Ubuntu Linux。假設有一個程序叫myprogram. 該程序提示使用者輸入;具體來說,使用者必須在提示時輸入一個整數並按Enter。我想使用 bash 腳本自動化這個過程。特別是,我想執行myprogram100 次(使用i1到的計數器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將使用名為foostdin 的文件的內容。

<<foo將使用該文本和僅包含的行之間的文本foo作為標準輸入。正如 Gilles 所說,這是一個here 文件(heredoc);EOF實際上並不意味著文件的結尾,它只是一個常見的heredoc delineator(我們在這個例子中使用“foo”代替)。

<<<foo將使用字元串“foo”作為標準輸入。您還可以指定一個變數$foo,shell 將使用它的內容作為標準輸入,如上所示。這被稱為herestring,因為它使用一個短字元串,而不是整個塊,就像在 heredoc 中一樣。Herestrings 在 bash 中有效,但在/bin/sh.

引用自:https://unix.stackexchange.com/questions/42554