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
还有你cat > file是笔误吗,我也运行不了
cat用法man cat
#3
请去掉空格
#4
你在Linux上中文输入法时按数字字母都是全角的
#5
经测试
cat file >& 2
cat file >& 1
cat file >& 0
都可以
```
cat > file是将STDIN的内容写到file中,如果直接按回车,file的内容会被清空
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
所有>/<都是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
还有你cat > file是笔误吗,我也运行不了
cat用法man cat
#3
请去掉空格
#4
你在Linux上中文输入法时按数字字母都是全角的
#5
经测试
cat file >& 2
cat file >& 1
cat file >& 0
都可以
```
cat > file是将STDIN的内容写到file中,如果直接按回车,file的内容会被清空
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
所有>/<都是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