我正在尝试了解进程替换以及何时执行此操作:
$ 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
可能出现什么问题?
答案 0 :(得分:3)
这是一个过程替代的怪癖/设计缺陷; bash只等待主命令终止。它不会等待替代流程结束。当tee
结束时,它会创建竞争条件:wc
在bash
打印下一个提示之前完成了吗{
"to": "fsfsdfsdfsadf",
"notification": {
"title": "Alert Title",
"body": "Alert body with detailed description.",
"icon": "@drawable/ic_launcher"
},
"data": {
"title": "custom",
"user-id": "123",
"user-age": "44",
"parameters": [{
"parameter": "1"
}]
}
}
?有时它确实如此,有时它不会。
有关详细说明和可能的解决方法,请参阅this Unix.SE answer by Stéphane Chazelas。
答案 1 :(得分:3)
当您使用进程替换时,您正在替换的进程在后台运行,并且shell在显示提示之前不会等待它完成。
有时它会在shell显示下一个提示之前显示其输出,有时会慢一些。它与bash的版本无关,它纯粹是偶然的,哪个进程更快。
shell正在等待你按Enter键,因为它已经显示了提示,它正在等你输入另一个命令。 shell对命令提示符下显示的2
一无所知 - 这是输出,而不是输入的一部分。
这通常不是问题,因为您通常不会将流程替换用于以交互方式向用户显示输出的程序。