一尘不染

可以将相同的输入文件用作管道命令的输出吗?

linux

考虑类似:

cat file | command > file

这是好习惯吗?难道这会在我们读取输入文件的同时覆盖输入文件,还是总是先在内存中读取它,然后通过管道传递给第二个命令?

显然,我可以将临时文件用作中介步骤,但我只是想知道..

t=$(mktemp)
cat file | command > ${t} && mv ${t} file

阅读 146

收藏
2020-06-02

共1个答案

一尘不染

不,那不行。管道中的所有命令同时执行,并且外壳程序在执行命令之前准备重定向。因此,该命令很可能在cat读取文件之前将其覆盖。

您需要moreutils提供的海绵(1)

2020-06-02