如何理解命令:cat

bear234 2016-12-09 09:28:26
cat file ----- 显示file的内容
cat > file ---- 给file写入内容
cat file1>file2 ----- 把file1的内容写入到file2



cat的含义是concatenate,也就是“连结”,而“>”是重定向。

所以我的理解就是:
cat连结起两个文件,然后“>”实现重定向,表明被连接起来的两个文件的数据走向。
比如,cat file1>file2 就是:把file1和file2连结起来,然后file1的内容流入file2。

按照我的这种理解,所以我进而想到:
cat file 其实就是 cat file>&1
也就是把file和标准输出连结起来,然后把file的内容流入标准输出。经测试,cat > file 和 cat file>&1的确做了同样的事情。

进而我又想,cat >file 应该就是把标准输入和file连结起来,然后标准输入的内容流入到file。
但是,我这样写命令:
cat 0>file,报错了:
cat: input error n standard input: Bad file number

但是,当我这样写:
cat 1>file,我发现和cat >file做了同样的事情。

所以我不理解了,为什么是从标准输出流入file呢?我明明是在输入啊???
...全文
234 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2016-12-12
  • 打赏
  • 举报
回复
cat的作用仅仅是把几个文件的内容显示到stdout。 所有>/<都是shell的重定向语法,跟cat没有关系。 M>&N的意思是把文件描述符M重定向到文件描述符N上。 M不写默认为1 所以 >&1就是1>&1,相当于没有重定向 cat file 0>&1也是可以的,因为给cat提供了参数file,cat不去尝试读stdin(0) 但是cat 0>&1却是不行的,因为cat没有参数,尝试从stdin(0)读取, 但是在cat执行之前,bash已经把0从open for read修改为open for write(0>&1的效果), 所以cat里面的read(0,...)就报错,返回EBADF
ipqtjmqj 2016-12-09
  • 打赏
  • 举报
回复
经测试 cat file >& 2 cat file >& 1 cat file >& 0 都可以 ``` cat > file是将STDIN的内容写到file中,如果直接按回车,file的内容会被清空
ipqtjmqj 2016-12-09
  • 打赏
  • 举报
回复

你在Linux上中文输入法时按数字字母都是全角的
bear234 2016-12-09
  • 打赏
  • 举报
回复
引用 2 楼 ipqtjmqj 的回复:
你的命令cat file > &1我运行报错,我觉得你的意思应该是cat file > /dev/stdout, 还有你cat > file是笔误吗,我也运行不了 cat用法man cat
请去掉空格
ipqtjmqj 2016-12-09
  • 打赏
  • 举报
回复
你的命令cat file > &1我运行报错,我觉得你的意思应该是cat file > /dev/stdout, 还有你cat > file是笔误吗,我也运行不了 cat用法man cat
ipqtjmqj 2016-12-09
  • 打赏
  • 举报
回复
输入用 <

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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