출력이 어떤 파일 설명자에서 나오는지 어떻게 확인할 수 있나요?

출력이 어떤 파일 설명자에서 나오는지 어떻게 확인할 수 있나요?

출력이 어떤 파일 설명자에서 나오는지 어떻게 확인할 수 있나요?

$ 에코 안녕하세요  
안녕하세요  
$ 에코 안녕하세요1>&2  
안녕하세요

모두 /dev/pts/0으로 이동
하지만 3개의 파일 설명자 0,1,2가 있습니다.

답변1

일반 출력은 파일 설명자 1(표준 출력)에서 발생합니다. 진단 출력과 사용자 상호 작용(프롬프트 등)은 파일 설명자 2(표준 오류)에서 발생하고 입력은 파일 설명자 0(표준 입력)의 프로그램으로 이동합니다.

표준 출력/오류로의 출력 예:

echo 'This goes to stdout'
echo 'This goes to stderr' >&2

위의 두 인스턴스에서는 echo표준 출력이 기록되지만 두 번째 명령에서는 명령의 표준 출력이 표준 오류로 리디렉션됩니다.

하나 또는 다른(또는 둘 다) 출력 채널 필터링(제거)의 예:

{
    echo 'This goes to stdout'
    echo 'This goes to stderr' >&2
} >/dev/null   # stderr will still be let through

{
    echo 'This goes to stdout'
    echo 'This goes to stderr' >&2
} 2>/dev/null   # stdout will still be let through

{
    echo 'This goes to stdout'
    echo 'This goes to stderr' >&2
} >/dev/null 2>&1   # neither stdout nor stderr will be let through

출력 스트림은 /dev/pts/0(위에 표시된 대로) 다른 곳으로 리디렉션되지 않는 한 현재 터미널(귀하의 경우)에 연결됩니다.

관련 정보