小编Kal*_*ert的帖子

为什么未处理此管道中第一个命令的标准输出?

我正在尝试编写一个可以同时 (i) 从 stdin 读取和 (ii) 从管道读取的命令。这个基本概念适用于zsh,但不适用于bash。以下会话说明了两个 shell 的行为差异:

$ echo bar > bar
$ zsh -f
zsh-5.8$ echo foo | cat < bar
foo
bar
zsh-5.8$ exit
$ bash --noprofile --norc
bash-5.0$ echo foo | cat < bar
bar
Run Code Online (Sandbox Code Playgroud)

我可以看到上面的命令提供了cat两个标准输入源(管道和重定向),所以也许应该如何处理它是不明确的。 zsh似乎连接了两个输入流,管道输入始终排在第一位。 bash似乎只是删除管道输入。

我的问题是:

  1. 为什么这两个壳的行为不同?
  2. 有没有办法强迫bash自己表现得像zsh

bash zsh pipe

3
推荐指数
1
解决办法
415
查看次数

标签 统计

bash ×1

pipe ×1

zsh ×1