표준 출력 닫기(>&-) [닫기]

표준 출력 닫기(>&-) [닫기]

터미널에서 시작된 GUI 프로그램이 콘솔에 기록되는 것을 방지하려고 합니다. 이를 위해 를 실행합니다 guiprogram >&-. 이로 인해 특정 작업에 대해 프로그램이 정지됩니다.

운영자는 정확히 어떤 일을 하나요 >&-? 이것의 목적은 무엇입니까? 몇 가지 예를 들어주실 수 있나요? 콘솔을 사용하여 콘솔에 쓰기를 차단하는 것이 합법적입니까? 표준 출력을 닫을 때 프로그램이 정지되는 이유는 무엇입니까?

답변1

프로그램의 출력이 어디에도 나타나지 않게 하려면 다음으로 리디렉션하세요 /dev/null.

guiprogram >/dev/null 2>&1

stdout닫기는 프로그램이 닫힌 파일로 수행할 작업을 알고 있는 경우에만 작동합니다.

실제로는 거의 사용되지 않지만 >&-나중에 다른 출력 대상을 할당하고 원래 출력 채널이 올바르게 닫혔는지 확인하려는 경우 stdout사용할 수 있습니다 .

답변2

프로그램이 정지되는 이유를 알려면 소스 코드를 살펴봐야 합니다. 또한 문제가 중단되거나 충돌하거나 무시될 수도 있습니다.

bash -c 'exec >&-; echo foo; echo bar >&2'
    bash: line 0: echo: write error: Bad file descriptor
    bar

이 쉘 코드는 이 문제를 무시합니다.

bash -c 'set -e; exec >&-; echo foo; echo bar >&2'
    bash: line 0: echo: write error: Bad file descriptor

오류로 인해 쉘 코드가 중단되었습니다.

일부 로깅 기능에 "성공할 때까지 반복" 루프가 있는 경우 정지가 발생할 수 있습니다. 파일 설명자 1에 쓰기가 실패하여 프로그램이 무한 루프에 빠지기 때문에 이런 일은 결코 발생하지 않습니다.

관련 정보