曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 5412|回复: 1
打印 上一主题 下一主题

cat > test2 < test1

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2010-6-21 23:18:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
沙发
 楼主| 发表于 2010-12-23 20:53:05 | 只看该作者

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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-16 00:43 , Processed in 0.081989 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表