如何理解命令:cat

时间:2021-01-02 00:07:04
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呢?我明明是在输入啊???

6 个解决方案

#1


输入用  <

#2


你的命令cat file > &1我运行报错,我觉得你的意思应该是cat file > /dev/stdout,
还有你cat > file是笔误吗,我也运行不了

cat用法man cat

#3


引用 2 楼 ipqtjmqj 的回复:
你的命令cat file > &1我运行报错,我觉得你的意思应该是cat file > /dev/stdout,
还有你cat > file是笔误吗,我也运行不了

cat用法man cat



请去掉空格

#4


如何理解命令:cat
你在Linux上中文输入法时按数字字母都是全角的

#5


经测试
cat file >& 2
cat file >& 1
cat file >& 0
都可以
```
cat > file是将STDIN的内容写到file中,如果直接按回车,file的内容会被清空

#6


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

#1


输入用  <

#2


你的命令cat file > &1我运行报错,我觉得你的意思应该是cat file > /dev/stdout,
还有你cat > file是笔误吗,我也运行不了

cat用法man cat

#3


引用 2 楼 ipqtjmqj 的回复:
你的命令cat file > &1我运行报错,我觉得你的意思应该是cat file > /dev/stdout,
还有你cat > file是笔误吗,我也运行不了

cat用法man cat



请去掉空格

#4


如何理解命令:cat
你在Linux上中文输入法时按数字字母都是全角的

#5


经测试
cat file >& 2
cat file >& 1
cat file >& 0
都可以
```
cat > file是将STDIN的内容写到file中,如果直接按回车,file的内容会被清空

#6


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