linux - 进程替换 >(cmd) 输出不正确

标签 linux bash process-substitution

我正在尝试了解进程替换以及我何时执行此操作:

$ tee >(wc -l) <<< $'aaa\nbbb'
aaa
bbb
$ 2

bash 在下一个提示后打印数字并等待我按回车键。

我正在使用 bash 4.4.12,在使用 bash 4.3.48 时遇到同样的问题。 bash 4.3.30 没有问题,命令正确输出:

$ tee >(wc -l) <<< $'aaa\nbbb'
aaa
bbb
2

可能的问题是什么?

最佳答案

这是流程替换的怪癖/设计缺陷; bash 只等待主命令终止。它不会等待替代进程结束。它在 tee 结束时创建了一个竞争条件:wc 是否在 bash 打印下一个提示之前完成?有时会,有时不会。

参见 this Unix.SE answer by Stéphane Chazelas以获得详细的解释和可能的解决方法。

关于linux - 进程替换 >(cmd) 输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218510/

相关文章:

bash - `test -n $a` 和 `test -n "$a"` 之间的区别

Bash:进程替换的范围是什么?

bash - @<(cat <<- EOF 在 Bash 中做了什么?

linux - 在 Linux 上通过 GATT 进行 BLE GAP 配置文件

linux - 嵌入式 linux,tty 在引导期间不工作

linux - 使用 awk 编辑文件中的字段

linux - bash陷阱和过程替换

linux - 在 Linux 和 Windows 中使用相同的 Android-sdk

linux - 找到所有具有特定扩展名的文件然后执行

bash - 重命名 BASH 中的几个文件