来自终端&lt;&lt; <! - ? - >的输入

时间:2014-07-08 01:23:16

标签: bash shell

我看到了用于测试代码的代码,其中包含来自终端的输入:

./spellcheck corpus_colors <<< rend

corpus_colors是文件名,我猜rend是终端输入。

<<<表现为终端输入?

3 个答案:

答案 0 :(得分:5)

<<<是一个bash扩展(在基线POSIX shell中不可用),它将文字内容重定向到stdin(添加了尾部换行符)。它是实现定义的,无论它是管道还是临时文件。它不作为终端 - 也就是说,isatty()将失败。

相比
echo rend | ./spellcheck corpus_colors

...用

./spellcheck corpus_colors <<<rend

可以稍微提高效率,避免设置管道所需的额外子shell。避免这个子shell也意味着一个操作可以是一个改变shell状态的shell函数,这些状态改变可以在函数执行结束后持续存在。

请参阅the wikipedia article on "here strings"或(更好)the relevant component of the bash manual

答案 1 :(得分:2)

您可以使用某些字符重定向输入和输出。

示例......

./someprogram > foo.txt

将替换文件foo.txt(或创建它)并添加someprogram的标准输出

./someprogram >> foo.txt

someprogram的标准输出附加到文件foo.txt(必要时创建)

./someprogram < foo.txt

将使用foo.txt的内容作为someprogram

的标准输入
./someprogram | someotherprogram

将重定向someprogram的标准输出,并将其用作someotherprogram的标准输入

./someprogram < foo.txt > bar.txt

将使用foo.txt的内容和someprogram的标准输入,并将someprogram的标准输出重定向到文件bar.txt

./someprogram <<< rends

将使用&#34; rends \ n&#34; (不带引号)作为someprogram

的标准输入

This page有关于该主题的一些很好的信息。

答案 2 :(得分:2)

在BASH下<<<用于指定'Here String'。它是“Here Document”的内联版本。在<<<被送入调用程序的stdin之后会发生什么。它类似于通过管道回显命令。更多信息可以在这里找到: http://tldp.org/LDP/abs/html/x17837.html