为什么这个管道会截断文件:
awk '...' file | tee file
而cat
ing 首先不是吗?
cat file | awk '...' | tee file
该文件只是一个包含数百行的常规配置文件。我习惯tee
避免使用sponge
(因为我必须先安装moreutils
)。
从长远来看,您会发现这种行为并不一致。
问题是,tee
在某个时间点打开文件进行写入。从那一刻起,文件被截断。这与哪个程序读取文件无关。
碰巧这cat
非常快,并且在tee
打开文件之前显然已经完成了文件的读取。但是如果例如系统负载较大,cat
可能还没有完成,管道cat
也可能被截断。
因此,不要在读取管道时写入同一个文件。相反,使用GNUawk
的-i inplace
,或者不可用您的系统,使用
cp file file.tmp &&
awk '...' file.tmp | tee file
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句