![이 명령은 무엇을 합니까? 명령의 시작과 끝에서 리디렉션](https://linux55.com/image/196055/%EC%9D%B4%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F%20%EB%AA%85%EB%A0%B9%EC%9D%98%20%EC%8B%9C%EC%9E%91%EA%B3%BC%20%EB%81%9D%EC%97%90%EC%84%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98.png)
다음 명령이 있습니다.
2>&1 compiler \
--flag1 \
--flag2 \
--option X=10 \
build \
2>&1 | tee -a output.log
이 동작이 무엇인지 잘 모르겠습니다. 중복되거나 원치 않는 동작인가요?
stderr로 인쇄하기 위해 처음에 리디렉션을 사용했습니다.
>&2 echo "Diagnostic Title"
확인 중이지만 조금 어려움을 겪고 있으며 명령 사양의 시작과 끝이 표시되지 않습니다.
도움을 주시면 감사하겠습니다!
답변1
기억해야 할 사항:
- 리디렉션은 명령의 어느 위치에나 나타날 수 있습니다.
- 리디렉션은 왼쪽에서 오른쪽으로 처리됩니다(단, 파이프라인이 설정된 후에만 해당).
이 두 지점을 고려하면 첫 번째 지점이 stdout이 현재 가리키는 항목으로 stderr을 리디렉션하는 것을 볼 수 있습니다. (여기 파이프가 있습니다.) 그런 다음 두 번째 파이프도 똑같은 일을 합니다. 표준 출력 이후그동안 아무것도 변하지 않았어, 두 번째 리디렉션은 실제로 중복됩니다.
또한 이것은 매우 중요한 점이며 여기에서 상당히 일반적인 질문 소스입니다.
리디렉션 처리됨앞으로실제로 명령은 다음과 같이 호출됩니다.
sed 'some sed program' myfile > myfile
내 파일 자르기첫 번째그런 다음 처리할 길이가 0인 입력 파일이 있는 sed를 시작합니다.
이것수락된 답변@Kusalananda가 지적한 관련 질문은 더 깊어집니다.