了解'cat'命令的工作原理

时间:2011-12-08 08:44:28

标签: unix

cat连接文件或stdin并将其重定向到stdout。

$ cat file1 > file5 file2 file3 file4

连接file1,file2,file3和file 4并将其写入file5。

$ cat file1 > file5 < file2 file3 file4

连接file1,file3和file4(不是file2)并写入file5

请解释这些输出

发生的事情的例子:

~/test$ echo "this is file 1"> file1
~/test$ echo "this is file 2"> file2
~/test$ echo "this is file 3"> file3
~/test$ echo "this is file 4">file4
~/test$ cat file1 > file5 file2 file3 file4
~/test$ cat file5
this is file 1
this is file 2
this is file 3
this is file 4
~/test$ cat file1 > file5  < file2 file3 file4
~/test$ cat file5
this is file 1
this is file 3
this is file 4

4 个答案:

答案 0 :(得分:2)

这不是关于cat的工作原理,而是关于shell重定向的更多信息。 shell在运行程序之前处理命令行。您可以更轻松地查看是否将所有io重定向推送到命令的末尾。第一个成为:

cat file1 file2 file3 file4 > file5

shell然后将cat的输出从终端更改为file5。 这完全独立于猫。

然后第二个命令是

cat file1 file3 file4 >file5 <file2

这会将键盘的标准输入更改为file2,将输出更改为file5。在这种情况下,因为在命令行上指定了文件,cat忽略标准输入,只读取1,3和4. -参数告诉cat从标准输入读取,所以

cat file1 - file3 file4 >file5 < file2

将文件1-4的内容输出到文件5.

答案 1 :(得分:1)

shell中只发生一次重定向;其余的作为参数传递。

第一个命令是

cat file1 file2 file3 file4 > file5

第二个命令是

cat file1 file3 file4 > file5 < file2

第二个命令不包括file2,因为cat从未被告知使用-从标准输入读取。

答案 2 :(得分:1)

重定向可以放在命令行的任何位置,尽管通常的方法是在最后。

您的第二个陈述不正确。应该忽略file2。(稍后更正)

答案 3 :(得分:1)

尝试创建简单的bash文件

#!/bin/bash

echo $@

然后运行

./bash.sh file1 file2 file3 file4 > file5

给你

file1 file2 file3 file4

./bash.sh file1 file3 file4 >file5 <file2

给你

file1 file3 file4

在文件5中你看到参数列表,cat做的是获取参数列表并将其写入std输出,这就是为什么文件2被忽略,它不是参数,它实际上是一个输入

如果你想让cat从std输入中读取 - 在命令

之后
cat file1 > file5 < file2 file3 file4 -

这将写

1111
3333
4444
2222

到file5

&LT;如果你写

,意味着重定向std输入
cat file1 > file5 file3 file4 -

它从file1,file3和file4 和键盘读取到文件5