2014-04-27 8 views
1

내 프로그램에서 std :: cout 및 std :: cerr로 출력되는 출력을 생성합니다. 내가C++에서 생성 된 cerr 및 cout이 Ubuntu에서 동일한 파일로 리디렉션됩니다.

./a.out <source> &> <target> 

같이 일반적으로 테스트 파일을 실행하면 대상은 ./a.out에 의해 생성 된 순서대로 출력의 두 가지 유형을 캡처합니다. 간단한 단위 테스트 프레임 워크에 대한 출력의 테스트를 자동화하려고 할 때

, 나는 떠들썩한 파티 스크립트에서 위의 구현 :

`rm $OUT_NAME` 
`./a.out $NEW_UNIT &> $OUT_NAME` 

을 (명백한 변수 이름). cout으로 보내지는 출력은 잘 인쇄됩니다; 그러나 cerr로 전송 된 것은 잘못 인쇄됩니다 (일부는 인쇄되고 인쇄는 오류없이 중지됨). 혹시 궁금한 점이 있으시면 먼저 'rm'을 추가하여 구버전에 덮어 쓰기/덧붙이기에 별다른 문제가 없음을 확신 할 수 있습니다.

아이디어가 있으십니까?

내 시스템 : 우분투 12.04.

답변

5

배쉬에서는 다음을 수행해야합니다

./a.out source > target 2>&1 

stdoutstderr을 병합 할 수 있습니다. 지정한 명령은 csh입니다.

그리고 당신은 stderrstdout을 병합 할 경우, 당신은 떠들썩한 파티에서

./a.out source 2> target 1>&2 
+1

두 번째 부분은 stdout을 stderr에 병합하는 것을 의미할까요? –

+0

정확합니다. @ Till Kolditz. 고쳤다. 감사. – unxnut

2

을 할 것입니다,이 작업을해야합니다 :

./a.out source 2>&1 > target 
3

./a.out source >> target 2>&1가 결합
2>&1 수단을하여 문제를 해결할 것 (표준 출력 (stdout)을 사용하는 표준 오류 (stderr)
>> 의미 프로그램의 출력 스트림을 "target"의 끝에 연결합니다. 그리고 만약 >> 대신 하나의 >을 사용한다면 프로그램의 출력 스트림을 "target"으로 대체하는 것을 의미합니다.

P. 두 개의 서로 다른 출력
std::cout<<"results"<<endl 과 떠들썩한 파티에서 일부 std::cerr<<"debug information"<<endl

, 당신은 ./a.out source 1>>Result.txt 2>> Debug.txt
그리고 당신의 "결과"을 할 수있는 코드를 가정 의 Result.txt에 저장하고 "디버그 정보"될 것 Debug.txt에 저장됩니다.
1>> 표준 출력을 표준 오류, 당신은 또한 표준 오류가 어딘가로 리디렉션 의미 2>를 사용할 수있는 곳의 뒷면에 리디렉션 의미 밖으로 어딘가에
2>>로 리디렉션, 당신은 또한 표준을 의미 1>를 사용할 수있는 곳의 뒷면에 리디렉션 의미

스크립트를 사용하여 프로그램을 자동으로 실행하려면 매우 유용합니다.