sort -o가 유용한 이유는 무엇입니까? 한 가지 일만하고

유닉스 철학은 말합니다 : 한 가지 일만하고 잘하십시오. 범용 인터페이스이므로 텍스트를 처리하는 프로그램을 만드십시오.

sort명령은, 적어도 GNU 정렬에서가 -o대신 파일로 출력 옵션을 stdout. 내가 왜 sort foobar -o whatever할 수있을 때 유용한가 sort foobar > whatever?



답변

그것은 단지 GNU 정렬이 아닙니다. BSD 정렬도 있습니다. 그리고 왜?
(나는 그것이 좋은 질문이라고 생각했다 …)

매뉴얼 페이지에서 : “주어진 인수는 표준 출력 대신 사용할 출력 파일 이름입니다.이 파일은 입력 파일 중 하나와 동일 할 수 있습니다.”

리디렉션을 사용하여 동일한 파일로 이동할 수 없으면 출력 리디렉션이 파일을 지 웁니다.

더 명확히하기 위해 파일을 정렬하고 정렬 된 결과를 같은 장소에 넣으려면 시도해 볼 수도 있습니다 sort < foo > foo. 출력 경로 재 지정을 제외하고 출력 foo수신 준비 파일 이 잘립니다 . 그리고 정렬 할 것이 없습니다. “-o”가 없으면 할 수있는 방법 sort < foo > bar ; mv bar foo입니다. 나는 -o옵션이 당신이 걱정할 필요없이 비슷한 것을한다고 가정합니다 .


답변

‘-o’옵션은 이미 Unixsort여섯 번째 판에 있습니다.

그러나 나는 그것이 유닉스 철학에 속하지 않는다는 것에 동의합니다. uniq그 옵션이 sort없었습니다 (그리고 -u그때 없었습니다 ).

내 PDP-11에서 하나의 매개 변수를 취하는 작은 프로그램을 사용했습니다.

renac whatever

whatever이미 존재하는 경우 stdin에서 임시 파일로 모든 내용을 쓰며 whateverstdin 입력이 건조 된 후에 만 이름이 바뀌 었 습니다. 이렇게 renac하면 입력을 덮어 쓰지 않고 파일 이름으로 리디렉션하는 대신 명령 출력을 파이프로 연결할 수 있습니다. 이런 식으로 덮어 쓰기 문제를 해결하는 것은 IMHO가 Unix 철학에 더 적합합니다.

stdin에 아무것도 도착하지 않은 경우 출력 파일을 덮어 쓰지 않고 (예 : 명령 행의 일부를 잘못 입력 한 결과) 옵션에 명명 된 파일에 stdin을 추가 할 수있는 옵션이 허용됩니다.

이것은 내가 만든 첫 번째 (첫 번째는 아니지만) 실제 C 프로그램 중 하나였습니다 (내 작업을 위해 주로 해당 시스템의 Pascal에서 개발했습니다).