">" 출력 리디렉션을 사용하는 Linux의 "|" 파이프 동작

">" 출력 리디렉션을 사용하는 Linux의 "|" 파이프 동작

명령을 실행하고 있어요

ls > a.txt | sort > b.txt

이 명령은 다음을 수행합니다.

  1. 구현하다ls

  2. 종류

  3. 정렬된 출력을 생성 a.txt하고 저장합니다.a.txt

  4. 창조 b.txt하지만,비어 있는.

누구든지 이것을 설명할 수 있나요?

나는 내 자신의 셸을 구현하고 있으며 이 동작을 이해하고 시뮬레이션해야 합니다.

답변1

|왼쪽 명령의 출력을 오른쪽 명령의 입력으로 공급합니다 . 운영자 는 >명령의 출력을 가져와 파일에 저장합니다. 이는 귀하의 예에서 도착하면 |모든 것이 출력되지 않음 을 의미합니다 a.txt. 따라서 sort오른쪽의 연산은 빈 문자열에 대해 연산을 수행하고 이를 다음 위치에 저장합니다.b.txt

tee아마도 당신이 원하는 것은 파일과 표준 출력 모두에 쓸 수 있는 명령을 사용하는 것입니다.

ls | tee a.txt | sort > b.txt

당신이 무엇을 하려는지 정말 궁금하지만, ls당신을 위해 일이 정리될 수도 있고 정리될 수도 있기 때문입니다.

답변2

ls > a.txt | sort > b.txt

을(를) 실행하고 있습니다 ls. 그럼 당신은 리디렉션 중이군요표준 출력만그런 다음 PIPE STDOUT 을 통해 sort 명령의 STDIN으로 파이프 STDOUT을 파이프하려고 합니다 ls.a.txt

STDOUT이 파일로 리디렉션되기 때문에 a.txtsort 명령의 STDIN에는 sort에 대한 내용이 없으므로 b.txt파일이 비어 있습니다.

b.txt파일에서 예상되는 콘텐츠를 만드는 방법에는 여러 가지가 있습니다 .

ls | sort > b.txt

또는

ls > a.txt ; cat a.txt | sort > b.txt

두 가지 모두 실제로 PIPE 왼쪽에 있는 STDOUT의 데이터를 PIPE 오른쪽에 있는 STDIN으로 전달해야 합니다.

답변3

Tim과 Eric이 말한 것과 유사 하게 다음을 사용하여 >STDOUT을 파일로 리디렉션할 때|sorttee동시에 2가지 일을 하세요:

  • STDIN을 파일로 보내기
  • STDIN을 STDOUT으로 직접 지정

결과적으로 STDIN( ls명령)이 파일에 저장되고 명령에 사용하기 위해 STDOUT으로 출력이 계속됩니다 sort. 사용 중인 수정된 명령은 다음과 같습니다.

ls | tee a.txt | sort > b.txt

관련 정보