相关疑难解决方法(0)

如何在同一个管道中读写同一个文件总是“失败”?

假设我有以下脚本:

#!/bin/bash
for i in $(seq 1000)
do
    cp /etc/passwd tmp
    cat tmp | head -1 | head -1 | head -1 > tmp  #this is the key line
    cat tmp
done
Run Code Online (Sandbox Code Playgroud)

在关键线上,我读取和写入tmp有时会失败的同一个文件。

(我读它是因为竞争条件,因为管道中的进程是并行执行的,我不明白为什么 - 每个人都head需要从前一个中获取数据,不是吗?这不是我的主要问题,但你也可以回答。)

当我运行脚本时,它输出大约 200 行。有什么办法可以强制这个脚本总是输出 0 行(所以 I/O 重定向tmp总是首先准备好,所以数据总是被破坏)?明确地说,我的意思是更改系统设置,而不是这个脚本。

谢谢你的想法。

bash process pipe io-redirection

9
推荐指数
2
解决办法
3560
查看次数

标签 统计

bash ×1

io-redirection ×1

pipe ×1

process ×1