【问题标题】:Pipe Operator in LinuxLinux 中的管道运算符
【发布时间】:2015-07-03 09:09:21
【问题描述】:

根据我的理解,Linux 中的管道运算符获取一个命令的标准输出并将其引导到下一个命令的标准输入。但我遇到了一个异常。 我正在尝试在标准输出中获取文件的内容,如下所示。

cat file1

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

所以为了利用管道运算符,我尝试如下执行

cat file1 | cat

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

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

【问题讨论】:

    标签: linux pipe stdout stdin cat


    【解决方案1】:

    你应该做什么:

    cat `cat file1`
    

    来自man cat

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

    也就是说,如果有一个文件名作为参数提供,它会将其内容显示到标准输出,否则它只会重定向到标准输入到标准输出。

    在您的情况下,文件名是从标准输入中读取的,并将其解释为连接到标准输出的字符串。

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

    cat `cat file1`
    

    等价于

    cat file2
    

    这会将 file2 的内容转储到标准输出。

    【讨论】:

    • 但是 "cat file1" 和 "cat
    • < file1 会将文件的内容放到标准输入上,所以实际上等价于cat file1。但是你正在做的是cat file1 | cat,它相当于echo file2 | cat,它只是将字符串“file2”转发到标准输出。
    【解决方案2】:

    你可以使用xargs:

    cat file1 | xargs cat
    

    XARGS General Commands Manual

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多