이 파이프가 파일을 자르는 이유는 무엇입니까?
awk '...' file | tee file
그리고 cat
먼저 하는 거죠, 그렇죠?
cat file | awk '...' | tee file
이 파일은 수백 줄의 일반 구성 파일입니다. 나는 tee
그것을 사용하지 않는 경향이 있습니다 ( 먼저 설치 sponge
해야하기 때문입니다 ).moreutils
답변1
장기적으로 보면 이 동작이 일관성이 없다는 것을 알게 될 것입니다.
문제는 tee
어느 시점에 파일이 쓰기 위해 열린다는 것입니다. 그 순간부터 파일이 잘립니다. 어떤 프로그램이 파일을 읽는지는 중요하지 않습니다.
이는 매우 빠르게 발생하며 cat
파일이 열리기 전에 읽기가 완료된 것 같습니다. tee
그러나 예를 들어 시스템에 과부하가 걸리는 경우 cat
시스템이 완성되지 않고 파이프가 cat
절단될 수 있습니다.
따라서 읽기 파이프와 동일한 파일에 쓰지 마십시오. 대신 Gnu awk
를 사용 -i inplace
하거나, 시스템에서 사용할 수 없는 경우 다음을 사용하세요.
cp file file.tmp &&
awk '...' file.tmp | tee file