/dev/null 2>&1 이게 뭐죠?

에드워드의 이미지

보통 파일하나 만들때
cat /dev/null > a.txt
라고 하면 0byte 짜리 a.txt 파일이 생기잖아요...

근데, 뒤에 2>&1 은 뭐죠?
어떨때 사용하는 건가요?

무한포옹의 이미지

에드워드 wrote:
보통 파일하나 만들때
cat /dev/null > a.txt
라고 하면 0byte 짜리 a.txt 파일이 생기잖아요...

근데, 뒤에 2>&1 은 뭐죠?
어떨때 사용하는 건가요?

shell redirection 을 공부하시면 됩니다 . man bash

간단하게 얘기하면

1 은 standard out - 표준출력

2 는 standard error - 표준 에러

2>&1 은 표준 에러를 표준 출력으로 redirection 하는 거지요.

예를 들면

 $ echo hi > hi.txt // 1> hi.txt 에서 1을 생략해도 됩니다. 표준 출력을 hi.txt 에 저장 
$ cat hi.txt
hi
$ cat hi.txt > /dev/null  // 표준 출력을 /dev/null 로 리다이렉션합니다. 결과없음
$ rm hi.txt  // hi.txt 를 지웁니다
$ cat hi.txt  
cat: hi.txt: No such file or directory // 에러출력입니다.
$ cat hi.txt >/dev/null
cat: hi.txt: No such file or directory // 위와 같은 에러
$ cat hi.txt > /dev/null 2>&1  // 표준 에러를 표준 출력으로 redirection
$  // 아무런 출력이 없습니다.
$ rm hi.txt 
$ rm hi.txt 
rm: cannot remove `hi.txt': No such file or directory 
$ rm hi.txt > hi_err.txt 2>&1 // 위의 에러를 표준 출력으로 돌려  hi_err.txt 로 저장  
$ cat hi_err.txt 
rm: cannot remove `hi.txt': No such file or directory 
$

-------------------------------
== warning 대부분 틀린 얘기입니다 warning ===

haewoo의 이미지

Quote:
cat /dev/null > a.txt

/dev/null의 내용을 Standard out으로 출력해서 a.txt에 담는다.

Quote:
cat /dev/null > a.txt 2>&1

cat /dev/null 을 수행하면서 나타나는 Standard out의 결과를 a.txt에 담고, Standard Error의 내용도 a.txt에 담는다.

Quote:
2>&1

는 stderr의 출력을 Redirection한 내용입니다.
nohmad의 이미지