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
설정된 값으로 리디렉션 됩니다stdout
(1>&2
반대로 수행됨).