stderr에 "권한 거부"가 없는 이유는 무엇입니까?

stderr에 "권한 거부"가 없는 이유는 무엇입니까?

명령이 있습니다. mywritercmd -f /tmp/test 2>&1 > log.txtbash 터미널에서 실행하면 명령이 반환됩니다.error: could not open output file "/tmp/test": Permission denied

그럼에도 불구하고 이 오류 메시지는로그.txt파일이 비어 있습니다 ...

왜?

나는 이 메시지가 stderr로 이동한 다음 파일로 이동해야 한다고 생각했지만 어쨌든 그렇지 않습니다.

답변1

주문으로 인해 차이가 발생합니다. 명령줄은 왼쪽에서 오른쪽으로 평가됩니다. 에 도달하면 2>&1stdout이 가는 곳마다 stderr를 전달하라는 지시가 있습니다. 이 시점에서는 해당 > log.txt부품이 아직 평가되지 않았습니다. 결과적으로 stderr은 기본값으로 유지되어 터미널에 출력됩니다.

mywritercmd -f /tmp/test > log.txt 2>&1그러면 원하는 동작이 발생하고 오류 메시지가 log.txt 파일에 기록됩니다.

관련 정보