为什么此管道会截断文件:
awk '...' file | tee file
而cat
先 ing 不是吗?
cat file | awk '...' | tee file
该文件只是一个有数百行的常规配置文件。我习惯tee
避免使用sponge
(因为我必须moreutils
先安装)。
答案1
从长远来看,你会发现这种行为并不一致。
问题是,tee
在某个时间点打开文件进行写入。从那一刻起,文件就会被截断。这与哪个程序读取该文件无关。
它只是发生得非常快,并且在打开文件cat
之前显然已经完成了文件的读取。tee
但如果例如系统负载较大,cat
可能还没有完成,并且管道cat
也可能被截断。
因此,请勿写入与读取管道的同一个文件。相反,请使用 Gnu awk
's -i inplace
,或者如果您的系统上不可用,请使用
cp file file.tmp &&
awk '...' file.tmp | tee file