살아가는 이야기
bash에서 표준오류(stderr)를 파이프로 받기 본문
내가 Unix를 배울 때는 Bourne shell이 기본이었다. 그냥 sh이라고 되어 있던 프로그램이다. 그런데 잠시 후 C shell이 등장해서 모두들 유행처럼 csh로 갈아탔다. 그리고 tcsh과 ksh이 등장했었다. 그런데 요즘 linux를 설치하면 bash가 기본으로 설정된다.
csh, tcsh에서는 표준 오류를 파이프로 받으려면
이렇게 하면 되었다. 그런데 bash에서는 조금 복잡해졌다. 2번 포트(표준오류)를 1번 포트(표준출력)와 합친 후에 이를 파이프로 받아야 한다. 그래서 다음과 같이 써야 한다.
표준오류만 파이프로 받으려면 꼼수를 써야 한다. 표준출력을 다른 곳으로 보내고 그 결과를 표준오류를 표준출력과 합친 다음에 표준출력을 파이프로 받아야 한다.
물론 표준오류만 재지정(redirection)하려면 다음과 같이 하면 된다.
핵심은 표준오류만 걸러내는 파이프가 없다는 것. 그래서 표준오류를 표준출력과 합치는 방법 2>&1을 기억해야 한다.
csh, tcsh에서는 표준 오류를 파이프로 받으려면
명령어 |& more
이렇게 하면 되었다. 그런데 bash에서는 조금 복잡해졌다. 2번 포트(표준오류)를 1번 포트(표준출력)와 합친 후에 이를 파이프로 받아야 한다. 그래서 다음과 같이 써야 한다.
명령어 2>&1 | more
표준오류만 파이프로 받으려면 꼼수를 써야 한다. 표준출력을 다른 곳으로 보내고 그 결과를 표준오류를 표준출력과 합친 다음에 표준출력을 파이프로 받아야 한다.
명령어 >/dev/null 2>&1 | more
물론 표준오류만 재지정(redirection)하려면 다음과 같이 하면 된다.
명령어 2> stderr.txt
핵심은 표준오류만 걸러내는 파이프가 없다는 것. 그래서 표준오류를 표준출력과 합치는 방법 2>&1을 기억해야 한다.
Comments