저는 단지 쉘 명령을 배우고 있습니다. 더 구체적으로는 파이프를 배우고 있습니다.
이제 다음 명령을 구별할 수 없습니다: ls | sort file.txt
및 sort file.txt
. 분명히 차이가 있어야 합니다.
누군가 무슨 일이 일어나고 있는지 설명해 주시겠습니까?
답변1
두 명령의 표시 결과는 동일 ls | sort file.txt
합니다 .sort file.txt
sort file.txt
행을 사전순으로 정렬 file.txt
하고 결과를 인쇄합니다.
ls | sort file.txt
ls
현재 디렉터리에 이름 목록을 생성하기 위해 호출됩니다 . 이 목록은 에서 읽혀지므로 sort file.txt
의 이름 목록을 무시하고 대신 정렬된 콘텐츠를 출력으로 생성합니다. 이 경우 표준 입력에서 아무것도 읽지 않았기 때문에 의 출력은 폐기됩니다 .sort
file.txt
ls
file.txt
ls
sort
ls | sort
이를 사용하여 출력 행 ls
(이미 정렬되어 있음) 을 정렬 할 수 있습니다 . sort
읽을 출력은 읽을 특정 파일 이름이 지정되지 않았기 때문에 ls
표준 입력 스트림(파이프된 출력 스트림)에서 읽혀집니다. ls
그러나 Unix 파일 이름은 텍스트 줄이 필요한 도구를 사용하여 처리되지 않을 수 있습니다. 이러한 파일 이름에는 개행 문자가 포함될 수 있기 때문입니다.