2012-01-23 3 views
0

stderr에서 응답을 반환하고 stderr에서 오류를 반환하는 프로그램이 있습니다. 불행히도 프로그램이 성공하더라도 stderr에 일부 텍스트를 방출하여 프로그램이 종료됩니다.stderr를 명령 확장에서 파이프로 캡쳐

명령 확장을 사용하여 변수에 프로그램 출력을 저장하고 싶습니다.ans = $ (prog) 2> & 1 | grep -v success

이것은 작동하지 않습니다. 2> & 1을 괄호에 넣으려고했지만 $ ans가 의심 스럽기 때문에 은 성공 텍스트를 얻습니다.

아이디어가 있으십니까? 당신은 표준 오류 스트림에서 '성공'을 필터링하려면

ans=$(prog 2>&1 | grep -v success) 

, 당신은 같은 것을 사용할 수 있습니다 :

답변

2

확실하지, 당신이 얻을하려고 무엇을, 그러나 아마 이것은 명령입니다

ans=$({ ./foo 3>&2 2>&1 >&3- | grep -v success; } 2>&1) 

그리고 만약을 , BashFAQ/002에서 언급 한 바와 같이이 :

당신이 할 수없는 것은 캡처 표준 출력에 하나의 변수 및 다른 변수의 stderr 만 FD 리디렉션을 사용합니다. 임시 파일 (또는 명명 된 파이프)을 사용하여이를 달성해야합니다.

+0

내 사례에는 도움이 될 것입니다. 감사합니다. 그러나 prog의 결과가 "성공"이라는 텍스트를 반환하면 작동하지 않습니다. – user1165758

+0

당신은 가능한 프로그램 출력과'ans' 변수에서 얻고 자하는 것에 관해서 아무 말도하지 않았습니다. 오류 스트림에서만 '성공'단어가있는 모든 행을 필터링하려고합니까? –

+0

답을 업데이트했습니다. 귀하의 질문이 소진되면, 당신은 대답을 수락하실 수 있습니다. –

관련 문제