我看到了用于测试代码的代码,其中包含来自终端的输入:
./spellcheck corpus_colors <<< rend
corpus_colors
是文件名,我猜rend
是终端输入。
<<<
表现为终端输入?
答案 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