考虑类似:
cat file | command > file
这是好习惯吗?难道这会在我们读取输入文件的同时覆盖输入文件,还是总是先在内存中读取它,然后通过管道传递给第二个命令?
显然,我可以将临时文件用作中介步骤,但我只是想知道..
t=$(mktemp) cat file | command > ${t} && mv ${t} file
不,那不行。管道中的所有命令同时执行,并且外壳程序在执行命令之前准备重定向。因此,该命令很可能在cat读取文件之前将其覆盖。
您需要moreutils提供的海绵(1)。