命令替换、进程替换和管道中的命令是否接受 stdin 输入?

命令替换、进程替换和管道中的命令是否接受 stdin 输入?

我期望cat在下面的命令替换、进程替换和管道中接受 stdin 输入,但是

  1. 为什么我提供标准输入后它不输出任何内容hello

    $ echo $(cat)
    hello
    
  2. 为什么它不让我提供标准输入

    $ echo <(cat)
    /dev/fd/63
    
  3. cat接受我的标准输入hello,并cat输出 hello到标准输出

    $ cat | cat
    hello 
    hello
    

答案1

  1. 您应该以 EOF (Ctrl+d) 结束输入,否则 cat 不会退出。

  2. echo 回显 fd 然后退出,从而关闭 cat 的输出描述符,cat 作为响应退出。

  3. 第一个猫的输入是标准输入,第二个猫的输出连接到标准输出。第一只猫的输出和第二只猫的输入通过管道连接在一起。

相关内容