为什么catfile 会覆盖文件,而cat<>file不会覆盖文件?

weresdfa 2015-04-28 10:52:55
这个帖子: http://bbs.chinaunix.net/forum.p ... p;page=7#pid1636825
里面说,>操作符的优先级高于<操作符,所以
cat < m.txt > m.txt
意味着首先执行管道重定向标准输出>m.txt,也就是清空了m.txt,然后cat命令再次读取<m.txt,所以是空的。

但是如果我执行cat <>m.txt的话,m.txt的内容保持不变。这是为什么呢,和上面那个命令的根本区别在于什么地方呢?
...全文
271 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Black_dog123 2021-07-23
  • 打赏
  • 举报
回复
  • 在 IO Redirection 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料。
    也就是说,在上例中,> file 会先将 file 清空,然后才读进 < file , 但这时候档案已经被清空了,因此就变成读不进任何数据了...

---shell十三问

youzi05 2015-04-28
  • 打赏
  • 举报
回复
其实,个人感觉这几个操作符没有优先关系吧,,, cat < m.txt > m.txt 命令应该是 shell 先以读方式打开, 替换标准输入, 之后又以写方法打开,替换标准输出, 然后执行cat程序, 在第二步,以写方式打开时自然就清空了, 到cat执行时什么内容也没有... bash的man手册中有这么一句话:
引用
redirections are processed in the order they appear, from left to right.
lz自己翻译吧
youzi05 2015-04-28
  • 打赏
  • 举报
回复
<>是以读写方式打开文件, 自然没有清空

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧