[shell script] 커맨드라인에서 에러 메시지 리다이렉션

HYEOB KIM·2022년 4월 25일
0

Shell

목록 보기
45/71

오류에 대해서 리다이렉션을 수행할 수 있습니다.

기존의 출력 리다이렉션은 에러 메시지에 대해서는 작동하지 않는다

예를 들어, 아래와 같이 리다이렉션 처리를 하면 파일이 존재하지 않아 에러가 발생하는데,

에러 메시지는 리다이렉션이 작동하지 않는 것을 볼 수 있습니다.

$ ls -al testfile > test
ls: cannot access 'testfile': No such file or directory

이렇듯 기존의 출력 리다이렉션 방식으로는 에러 메시지를 리다이렉트 할 수 없습니다.

STDIN

기존의 터미널 인터페이스의 표준 입력은 키보드 입력입니다.

키보드로 입력하면 STDIN 파일 디스크립터(0)를 거쳐 쉘에 전달됩니다.

입력 리다이렉션(<)은 기존의 표준 입력을 파일로 지정합니다.

그래서 파일의 내용이 STDIN 파일 디스크립터(0)를 거쳐 쉘에 전달됩니다.

STDOUT

기존의 터미널 인터페이스의 표준 출력은 터미널 모니터입니다.

그래서 모든 출력STDOUT 파일 디스크립터(1)를 거쳐 모니터로 향합니다.

출력 리다이렉션(>)은 기존의 표준 출력을 파일로 지정합니다.

그래서 모든 출력STDOUT 파일 디스크립터(1)를 거쳐 파일로 향합니다.

STDERR

표준 오류의 출력은 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
profile
Devops Engineer

0개의 댓글