pipping查找输出到xargs然后到sed时的随机行为



我使用的是这些工具的gnu版本。我正在尝试解压缩一个档案并转换一个文件。

该文件是";myfile.txt";它出现在档案中的多个文件夹中,所以我认为将完整路径传递给xarg会转换所有文件:

mkdir temp
unzip mypackage.zip -d temp
find temp -iname "myfile.txt" | xargs -I FILE sh -c "sed -e 's/replacethis/withthis/g' -e 's/replacethistoo/withthisaswell/g' FILE | tee FILE"
# List the files
find temp -iname "myfile.txt" | xargs -I FILE ls -l FILE
# Cat the files
find temp -iname "myfile.txt" | xargs -I FILE cat FILE
# Clean up 
rm -Rf temp

我多次运行这个脚本,结果都不一样,我不明白。

每次都有不同的";myfile.txt";被修改;myfile.txt";文件具有0字节

为什么会发生这种情况?每次都应该是一样的,不是吗?是发现只通过一个,随机,";myfile.txt";每次运行此脚本时xargs的路径?

为什么会发生这种情况?每次都应该一样,不是吗?

这是因为的两个并行操作之间存在竞争条件

  • sed打开并读取文件
  • tee打开并截断文件

如果tee获胜,则当sed读取该文件时,该文件将为空,因此它将为0字节。

如果sed获胜,它将读取(至少部分(文件,您将获得一些数据。

由于流程调度是不可预测的,因此每次都有可能看到不同的结果。

相关内容

最新更新