cat, sort, tee 및 Pipes를 사용하여 파일을 수정할 때 일관되지 않은 동작

cat, sort, tee 및 Pipes를 사용하여 파일을 수정할 때 일관되지 않은 동작

상태: 다음 명령을 사용하는 경우:

cat foo | sort | tee foo

여러 줄의 텍스트 파일이 어디에 foo있고 결과가 일치하지 않습니다. 내가 관찰한 두 가지 결과는 다음과 같습니다.

  1. 파일이 정렬되고 정렬된 내용이 stdout으로 인쇄됩니다.
  2. 파일이 비워지고 아무것도 인쇄되지 않습니다.

질문: 왜 이런 일이 일어나는 걸까요?

PS 내 시스템에 sort옵션이 있다는 것을 알고 있습니다.-o

답변1

경쟁 조건을 만들었습니다. 파이프 양쪽에서 두 개의 명령을 실행합니다. 두 명령 모두 서로 다른 방식(읽기 및 지우기)으로 동일한 파일에 액세스하려고 합니다. 결과는 기회입니다.

cat foo | sort | ( tee foo.new; mv foo.new foo)

관련 정보