Linux中的管道操作符

Linux中的管道操作符,linux,pipe,stdout,stdin,cat,Linux,Pipe,Stdout,Stdin,Cat,据我所知,Linux中的管道操作符获取一个命令的标准输出,并将其引导到下一个命令的标准输入。但我遇到了一个反常现象。 我正在尝试获取标准输出中的文件内容,如下所示 cat文件1 它显示内容。假设内容是另一个名为file2的文件。 现在我想显示file2的内容 因此,为了利用管道操作符,我尝试如下执行 cat文件1 | cat 第一个cat命令应通过管道输出(此处为“file2”)。后续命令中的cat必须从标准输入(此处的值为“file2”)接受它,并打印file2的内容 但它只显示“file2”

据我所知,Linux中的管道操作符获取一个命令的标准输出,并将其引导到下一个命令的标准输入。但我遇到了一个反常现象。 我正在尝试获取标准输出中的文件内容,如下所示

cat文件1

它显示内容。假设内容是另一个名为
file2
的文件。 现在我想显示
file2
的内容

因此,为了利用管道操作符,我尝试如下执行

cat文件1 | cat

第一个cat命令应通过管道输出(此处为“file2”)。后续命令中的cat必须从标准输入(此处的值为“file2”)接受它,并打印
file2
的内容

但它只显示“file2”,而不显示其内容。

您应该做什么:

cat `cat file1`
手动猫

将文件或标准输入连接到标准输出

换句话说,如果有一个文件名作为参数提供,它将向标准输出显示其内容,否则它将重定向到标准输出的标准输入

在您的例子中,文件名是从标准输入读取的,它被解释为要连接到标准输出的字符串

反引号用于插入命令的标准输出,即:

cat `cat file1`
相当于

cat file2

它将把文件2内容转储到标准输出。

您可以使用
xargs

cat file1 | xargs cat

但“cat文件1”和“cat将把文件的内容放在标准输入上,因此它实际上相当于
cat file1
。但是您所做的是
cat file1 | cat
,它相当于
echo file2 | cat
,它只是将字符串“file2”转发到标准输出。