이 명령은 무엇을 합니까? 명령의 시작과 끝에서 리디렉션

이 명령은 무엇을 합니까? 명령의 시작과 끝에서 리디렉션

다음 명령이 있습니다.

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가 지적한 관련 질문은 더 깊어집니다.

관련 정보