상태: 다음 명령을 사용하는 경우:
cat foo | sort | tee foo
여러 줄의 텍스트 파일이 어디에 foo
있고 결과가 일치하지 않습니다. 내가 관찰한 두 가지 결과는 다음과 같습니다.
- 파일이 정렬되고 정렬된 내용이 stdout으로 인쇄됩니다.
- 파일이 비워지고 아무것도 인쇄되지 않습니다.
질문: 왜 이런 일이 일어나는 걸까요?
PS 내 시스템에 sort
옵션이 있다는 것을 알고 있습니다.-o
답변1
경쟁 조건을 만들었습니다. 파이프 양쪽에서 두 개의 명령을 실행합니다. 두 명령 모두 서로 다른 방식(읽기 및 지우기)으로 동일한 파일에 액세스하려고 합니다. 결과는 기회입니다.
cat foo | sort | ( tee foo.new; mv foo.new foo)