曲径通幽论坛

标题: cat > test2 < test1 [打印本页]

作者: beyes    时间: 2010-6-21 23:18
标题: cat &gt; test2 &lt; test1
cat > test2 < test1

分析
从左到右,cat 欲将标准输出重定向到 test2 文件。如果没有后半部分,且 test1 文件不存在,即仅有 cat > test2 时,如果不做任何动作,命令不会结束。如果一直在终端输入内容并不断按回车,命令仍然不会结束,但这些从终端标准输入里输入的内容都会被写到 test2 文件中。若想结束时,可以按 ctrl + d 或 ctrl + c,结束后标准输入的内容会输出到 test2 文件中。

这时考虑 < test1 这部分的内容,test1 是个文件,而不是命令,所以这部分的内容被重定向到标准输入,而不是直接到 test2 中,所以对于整个命令而言,执行的顺序是:

cat 要将标准输入重定向到 test2,而标准输入正是来自 test1 的内容,最后 test2 中的内容和 test1 中的一样。如果 test2 原先不存在,则创建 test2,如果存在则覆盖之。

同理,使用 >> 符号则是将 test1 中的内容追加到 test2 中。在脚本中还会经常用到 here 文档形式,如:
cat >> test2 << eof
something
hello world
eof

作者: beyes    时间: 2010-12-23 20:53
标题: cat &gt;&gt; test.sh &lt;&lt; EOF
cat >> test.sh << EOF
这里的 >> 和上面的 > 意义不尽相同。

如果没有后面的 << EOF ,那么就是从标准输入的内容追加到 test.sh 文件中。在后面有 << EOF 后,标准输入在遇到 EOF 才会停止,这就是 here 文档。当然,这个 EOF 也可以是别的字符串。
示例用法:
$ cat >> test.sh << EOF
> #!/bin/sh
> echo "hello shell"
> /bin/bash --login
> EOF
$ cat test.sh
#!/bin/sh
echo "hello shell"
/bin/bash --login
here 文档还可以参考:
http://www.groad.net/bbs/read.php?tid-757.html




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2