【发布时间】:2021-01-14 11:38:52
【问题描述】:
有人可以帮助解释 shell 中多个管道 (|) 命令的以下行为:
场景 1:
回声 1 > t2.txt |回声 2 > t2.txt |回声 3 > t2.txt | echo 4 > t2.txt && cat t2.txt
我希望上述命令的输出是 '4'(因为 echo 4 > t2.txt 是 txt 文件的最后输入),但实际输出是 '1'。
场景 2:
回声 1 > t2.txt |触摸t2.txt | echo 4 > t2.txt && cat t2.txt
上面的命令有时输出为 1 有时为 4
这是一个计算结果的基本脚本:
结果0 && i=0;而 [ $i -lt 1000 ];做回声1>测试|回声2>测试|回声 3 > 测试;猫测试>>结果0; ((i++));完成 && 排序
992 1
8 3
对这种随机性有什么解释吗?
【问题讨论】:
-
管道组件异步运行。打开
t2.txt以同时写入四个不同的子shell,您会遇到竞争条件。