linux에서 redirect 중 2>&1 은 무엇을 의미하나요?

This topic contains 1 reply, has 2 voices, and was last updated by  Anonymous 2018-06-18 01:26.

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #382

    technote
    Keymaster

    일반적으로 linux에서 redirect를 사용한다고 하면 다음과 같이 사용합니다.

    test.sh > /dev/null
    test.sh > a.txt

    위와 같이 화면에 출력될 것을 아무것도 출력되지 않게 /dev/null로 던저버리거나 파일로 저장하게 합니다.

    간혹 아래와 같이 2>&1이 사용되는 경우가 있는데 어떤 의미인지 궁금합니다.

    test.sh > /dev/null 2>&1

    • This topic was modified 5 months ago by  technote.
    • This topic was modified 5 months ago by  technote.

    #385

    Anonymous

    대표적으로 표준 입출력은 standard input (0), standard output (1), standard err (2) 이렇게 3개가 존재합니다.

    test.sh < a.txt
    위와 같이 redirect를 하게 되면 standard input 을 keyboard가 아닌 a.txt 파일로 변경하라는 의미가 되고,

    test.sh > a.txt
    위와 같이 redirect를 하게 되면 standard output을 monitor가 아닌 a.txt 파일로 변경하라는 의미가 됩니다.

    반면, 위에서 standard output을 a.txt 로 변경했음에도 불구하고, 화면에 출력이 나오는 경우가 있습니다.
    그것은 바로 standard error일 경우가 그렇습니다.

    “>” 는 standard output만 redirect한 것이지 standard error 까지 redirect 한 것이 아니기 때문입니다.

    따라서 standard error 까지 file로 저장하기 위해서는 2>&1 라는 것을 추가로 적어주어야 합니다.

    test.sh > a.txt 2>&1

    ‘2>&1’ 에서 ‘2’ 는 standard error 를 뜻하고 ‘>’ 는 redirect를 의미하고 ‘&1’ 은 standard output을 나타냅니다.

    즉, standard error는 ‘2>&1’ 을 통해서 standard output 으로 redirect 되고, 이렇게 standard output 으로 redirect된 이후 ‘> a.txt’ 을 통해 a.txt 파일로 다시 한번 redirect 되는 것입니다.

    그렇다면 그냥 ‘2>1’ 로 하면되지 의미를 알 수 없는 ‘&’를 붙일까요.

    여기서 ‘&’ 는 뒤에 오는 숫자가 file descriptor라는 의미를 나타냅니다. 즉 ‘2>1’만 하게 되면 standard error가 파일이름 1로 저장되 버리기 때문입니다. &1을 해서 standard output을 나타내는 1을 의미하게 되는 것입니다.

Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.