假设我有一个 shell 脚本,它从键盘获取输入。我想将所有输入写入一个文件中,然后使用该文件为脚本提供输入,而不是使用键盘。这可能吗?如果可以,怎么做?提前致谢。
答案1
什么时候
- 你确切地知道程序或脚本需要什么信息,和
- 你知道命令其中需要的信息,和
- 你不还需要从你的终端向它提供输入
...那么这很简单。你可以使用输入重定向,最简单的输入重定向形式就足够了。
./script < answers
将其替换./script
为实际运行程序或脚本的命令以及answers
包含所有输入的文件的路径。
< answers ./script
(如果您发现这样更方便,您也可以这样写。无论哪种情况,<
都在answers
-- 之前,您甚至可以写<answers
--,如果您有其他必须传递给 的命令行参数./script
,那也没问题。)
默认情况下,标准输入通常是一个终端,但你可以将其重定向到任何文件或设备。shell 运算<
符重定向标准输入。有关更多详细信息以及有关重定向的完整内容,请参阅重定向。
另一方面,如果您不太清楚程序或脚本会提示什么信息(因此您需要为可能被问到或可能不被问到的问题指定答案,或者可能以任何顺序被问到的问题,或者可能以重要的变化被问到的问题指定答案),那么您需要编写另一个脚本来处理提供必要的输入。有一些工具可以自动完成此操作;通常,expect
是个不错的选择。不过,从你所说的来看,你似乎不需要这个。(如果需要,你应该提供更多详细信息。)
答案2
我相信“此处的字符串”可以为您做到这一点。用法:command <<< $WORD
。当然,每个条目都必须位于单独的行上,如下所示:
first variable
second variable
third variable
下面是来自下面提到的网站的一个简单的例子:
# Instead of:
if echo "$VAR" | grep -q txt # if [[ $VAR = *txt* ]]
# etc.
# Try:
if grep -q "txt" <<< "$VAR"
then # ^^^
echo "$VAR contains the substring sequence \"txt\""
fi
# Thank you, Sebastian Kaminski, for the suggestion.
信息:
$WORD
:这是包含要提供给命令的信息的文件,在本例中,该文件包含命令运行所需的值。