쉘스크립트의 OUTPUT 이해 : 2>&1 처리

2>&1 쓰는이유에 대한 설명..
ls foo > /dev/null 2>&1.
여기서 무슨 일이 일어나고 있는지, 왜 이것이 작동하는지 설명하겠습니다.

I / O 리디렉션에 대한 간략한 소개

간단히 말해서 리디렉션은 명령의 출력을 다른 위치로 보내는 데 사용되는 메커니즘입니다. 예를 들어, cat파일 만 있으면 출력이 기본적으로 화면에 인쇄됩니다.

1. 기본

$ cat foo.txt
foo
bar
baz

그러나이 출력을 다른 위치로 리디렉션 할 수 있습니다. 예를 들어 여기에서는 다음과 같은 파일로 리디렉션합니다 output.txt.

$ cat foo.txt > output.txt

$ cat output.txt
foo
bar
baz

처음 cat에는 화면에 출력이 표시되지 않습니다. 표준 출력 ( stdout) 위치를 파일로 변경하여 더 이상 화면을 사용하지 않습니다.

또한 프로그램이 오류 메시지를 보낼 수있는 표준 오류 ( stderr) 라고하는 다른 위치가 있음을 아는 것도 중요 합니다. 따라서 cat다음과 같이 존재하지 않는 파일을 시도 하면 :

$ cat nop.txt > output.txt
cat: nop.txt: No such file or directory

를 stdout파일로 리디렉션하더라도 표준 오류가 아닌 표준 출력 만 리디렉션하기 때문에 화면에 오류 출력이 표시됩니다.

유일한 경고는 Unix 시스템에서는 모든 것이 파일이다. 
표준 출력 ( stdout) 및 표준 오류 ( stderr)에 대한 파일 설명자가 있다는 것을 알아야합니다 .

일두 위치를 식별  1 = stdout 2 =  stderr.

1 > 의 이해 (stdout)

첫 번째 예제로 돌아가서의 출력을 cat foo.txt로 리디렉션 할 때 다음 output.txt과 같이 명령을 다시 작성할 수 있습니다.

$ cat foo.txt 1> output.txt

이것은 1단지 stdout. 리디렉션 구문은 다음 [FILE_DESCRIPTOR]>과 같습니다. 파일 설명자를 그대로 두는 것은 1>.

따라서 리디렉션 stderr하려면 올바른 파일 설명자를 제자리에 추가하기만 하면됩니다.

2 > 의 이해 (stderr)

# Using stderr file descriptor (2) to redirect the errors to a file
$ cat nop.txt 2> error.txt

$ cat error.txt
cat: nop.txt: No such file or directory

이 시점에서 이미이 2>&1이무엇을하고 있는지 알고있을 것입니다

&1파일 설명자 1 ( stdout) 의 값을 참조하는 데 사용 합니다 . 그래서  2>&1은 기본적으로 ” stderr우리가 리디렉션하는 동일한 위치로 리디렉션 stdout“이라고 말합니다. 그리고 같은 것을 할 수있는 두 리디렉션 할 것을 stdout하고 stderr같은 장소에 저장

$ cat foo.txt > output.txt 2>&1

$ cat output.txt
foo
bar
baz

$ cat nop.txt > output.txt 2>&1

$ cat output.txt
cat: nop.txt: No such file or directory

요약

  • 프로그램이 출력을 보내는 위치는 표준 출력 ( stdout)과 표준 오류 ( stderr) 2가지가 있씁니다.
  • 이러한 출력을 다른 위치로 리디렉션 할 수 있습니다.
  • 파일 설명자는 stdout(1)과 stderr(2) 를 식별하는 데 사용됩니다 .
  • command > output의 바로 가기 일뿐입니다 command 1> output.
  • &[FILE_DESCRIPTOR]파일 설명자 값을 참조하는 데 사용할 수 있습니다 .
  • 를 사용 2>&1하면 stderr설정된 값으로 리디렉션 됩니다 stdout1>&2반대로 수행됨).

덧글 삭제

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다