2013-10-24 8 views
4

나는 간단한 스크립트를 놓친 것이 틀림 없다.하지만 실행 스크립트를 사용하여 몇 가지 유틸리티 스크립트를 호출하고 유틸리티의 모든 출력을 처리하려고한다. 하나의 파이프를 통해. 내 문제는 유틸리티가 stderr를 사용하여 오류 조건을보고하지만 상위 스크립트에서 사용하기 위해 캡처 할 수 없다는 것입니다.Bash 스크립트 - 부모 스크립트의 stdout을 부모의 stdout으로 리다이렉트

부모 스크립트 :

#!/bin/bash 
child 2>&1 >/dev/null 

아이 스크립트

#!/bin/bash 
echo "Print" 
echo "Error" 1>&2 

내가 기대하는 것은 childstderr, (그리고 모든 명령의) (따라서 더 출력) stdout로 리디렉션되지 않도록하지만, parent을 실행하면 Error이 터미널에 echo됩니다 ("Print"는/dev/null로 전송됩니다).

답변

7

stderr을 stdout의 파일 핸들 (아마도/dev/stdout)로 리디렉션하고 있습니다. 그런 다음 stdout을/dev/null로 재 지정합니다. 그러나 stderr은 여전히 ​​/ dev/stdout을 가리키고 있습니다.

child &>/dev/null 
+1

주문 :

모든 출력 먼저 리디렉션 표준 출력을 무시하려면, 다음 또는 특별히 떠들썩한 파티를 사용하는 더 간단하기 때문에, 함께 표준 출력 및 표준 오류 리디렉션 표준 오류가

child >/dev/null 2>&1 

을 stdout에 리디렉션 운영. 고마워, 위대한 작품과 내가 생각했던 것처럼 바보 같은 느낌. – Sam

+0

자신을 걷어차 지 마라. –