오류에 대해서 리다이렉션을 수행할 수 있습니다.
예를 들어, 아래와 같이 리다이렉션 처리를 하면 파일이 존재하지 않아 에러가 발생하는데,
에러 메시지는 리다이렉션이 작동하지 않는 것을 볼 수 있습니다.
$ ls -al testfile > test
ls: cannot access 'testfile': No such file or directory
이렇듯 기존의 출력 리다이렉션 방식으로는 에러 메시지를 리다이렉트 할 수 없습니다.
기존의 터미널 인터페이스의 표준 입력은 키보드 입력
입니다.
키보드로 입력
하면 STDIN 파일 디스크립터(0)
를 거쳐 쉘에 전달됩니다.
입력 리다이렉션(<
)은 기존의 표준 입력을 파일
로 지정합니다.
그래서 파일
의 내용이 STDIN 파일 디스크립터(0)
를 거쳐 쉘에 전달됩니다.
기존의 터미널 인터페이스의 표준 출력은 터미널 모니터
입니다.
그래서 모든 출력
은 STDOUT 파일 디스크립터(1)
를 거쳐 모니터
로 향합니다.
출력 리다이렉션(>
)은 기존의 표준 출력을 파일
로 지정합니다.
그래서 모든 출력
이 STDOUT 파일 디스크립터(1)
를 거쳐 파일
로 향합니다.
표준 오류의 출력은 STDERR 파일 디스크립터(2)
를 거쳐 모니터
로 향합니다.
출력 리다이렉션(>
)은 STDOUT 파일 디스크립터(1)
를 다루기 때문에 STDERR 파일 디스크립터(2)
를 거치는 표준 오류는 영향을 받지 않습니다.
표준 에러만 파일로 리다이렉션 하려면 2>
를 이용합니다.
$ ls -al testfile test b1 2> test
-rw-rw-r-- 1 hyeob hyeob 56 Apr 25 08:34 test
$ cat test
ls: cannot access 'testfile': No such file or directory
ls: cannot access 'b1': No such file or directory
test
파일은 존재하므로 표준 출력으로 모니터에 출력하고,
testfile
, b1
파일은 존재하지 않아 표준 에러가 test
파일로 리다이렉션 되었습니다.
출력 리다이렉션 기호 앞에 파일 디스크립터 번호
를 적어줍니다.
$ ls -al testfile test b1 2> test 1> test2
$ cat test
ls: cannot access 'testfile': No such file or directory
ls: cannot access 'b1': No such file or directory
$ cat test2
-rw-rw-r-- 1 hyeob hyeob 56 Apr 25 08:40 test
표준 에러
는 2> test
로, 표준 출력
은 1> test2
로 보내진 것을 볼 수 있습니다.
출력 리다이렉션 기호 앞에 &
를 붙이면 표준 출력, 에러
모두 하나의 파일로 리다이렉션 됩니다.
$ ls -al testfile test b1 &> test
$ cat test
ls: cannot access 'testfile': No such file or directory
ls: cannot access 'b1': No such file or directory
-rw-rw-r-- 1 hyeob hyeob 56 Apr 25 08:42 test