自动化 shell 脚本从文件而不是键盘读取所有输入

自动化 shell 脚本从文件而不是键盘读取所有输入

假设我有一个 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:这是包含要提供给命令的信息的文件,在本例中,该文件包含命令运行所需的值。

看:https://www.tldp.org/LDP/abs/html/x17837.html

相关内容