[shell script] 스크립트 내에서 출력 리다이렉션 사용하기

HYEOB KIM·2022년 4월 25일
0

Shell

목록 보기
46/71

일시 리다이렉션

쉘 스크립트에 출력 리다이렉션을 작성할 때,
출력 리다이렉션을 특정 파일 디스크립터에 하고 싶다면
>&<파일 디스크립터 번호>의 형식으로 입력합니다.
(&<파일 디스크립터>는 해당 파일 디스크립터가 출력되는 장소를 나타냅니다)

echo "this is error message" >&2

이때 기호 뒤에 파일명을 적어주지 않습니다.

이렇게 작성하면 나중에 스크립트 파일을 실행할 때,
특정 파일로 해당 파일 디스크립터로 출력 리다이렉션을 수행할 경우,
한 번에 동작합니다.

예를 들어, 두 개의 에러 메시지에 대해 >&2로 지정해주었습니다.

$ cat test1
#!/bin/bash
echo "this is error message" >&2
echo "this is normal message"
echo "this is error message 2" >&2

$ ./test1
this is error message
this is normal message
this is error message 2

단순히 파일을 실행하면 모든 메시지가 모니터에 나타납니다.

하지만, 파일을 실행하면서 특정 파일 디스크립터로 출력 리다이렉션을 할 경우,
스크립트 파일에서 출력으로 지정된 파일 디스크립터 중 해당하는 메시지가 리다이렉션 됩니다.

$ ./test1 > test
this is error message
this is error message 2

$ cat test
this is normal message

$ ./test1 2> test2
this is normal message

$ cat test2
this is error message
this is error message 2

지속 리다이렉션

각 줄 마다 >&2와 같은 형식을 적기가 귀찮다면 exec를 활용하는 방법이 있습니다.

$ cat test1
#!/bin/bash
exec 1> test

echo "this is error message"
echo "this is normal message"
echo "this is error message 2" >&2

$ ./test1
this is error message 2

$ cat test
this is error message
this is normal message

여기서 눈 여겨 볼 점은 exec1번 파일 디스크립터로 출력 리다이렉션을 설정했지만, >&2가 붙은 줄의 경우 리다이렉션 되지 않았습니다.

커맨드라인에서 2번 파일 디스크립터로 출력 리다이렉션 할 경우 해당 항목이 리다이렉션 되는 것을 확인할 수 있습니다.

$ ./test1 2> test2

$ cat test2
this is error message 2
profile
Devops Engineer

0개의 댓글