可以使用相同的输入文件作为管道命令的输出吗?
- 2024-10-30 08:36:00
- admin 原创
- 47
问题描述:
考虑一下这样的事情:
cat file | command > file
这是好的做法吗?这是否可以在我们读取输入文件的同时覆盖它,还是总是先在内存中读取,然后通过管道传输到第二个命令?
显然,我可以使用临时文件作为中间步骤,但我只是想知道......
t=$(mktemp)
cat file | command > ${t} && mv ${t} file
解决方案 1:
不可以。管道中的所有命令同时执行,并且 shell 在执行命令之前会准备重定向。因此,命令很可能会在 cat 读取文件之前覆盖该文件。
您需要moreutils 的sponge(1)。
解决方案 2:
您也可以使用类似这样的方法(不推荐,在生产代码中使用明确的临时文件):
{ rm file && your_command > file; } < file
解决方案 3:
您不仅不应该将输出写入输入,还应该避免将输出循环回输入。
在处理大文件时,我尝试过
cat *allfastq30 > Sample_All_allfastq30
并生成错误消息:
cat: Sample_All_allfastq30: input file is output file
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD