명령을 실행하고 있어요
ls > a.txt | sort > b.txt
이 명령은 다음을 수행합니다.
구현하다
ls
종류
정렬된 출력을 생성
a.txt
하고 저장합니다.a.txt
창조
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.txt
sort 명령의 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을 파일로 리디렉션할 때|
sort
tee
동시에 2가지 일을 하세요:
- STDIN을 파일로 보내기
- STDIN을 STDOUT으로 직접 지정
결과적으로 STDIN( ls
명령)이 파일에 저장되고 명령에 사용하기 위해 STDOUT으로 출력이 계속됩니다 sort
. 사용 중인 수정된 명령은 다음과 같습니다.
ls | tee a.txt | sort > b.txt