2010-12-16 2 views
8

Linux에서 콘솔 응용 프로그램의 stdout을 콘솔 대신 파일로 리디렉션하려고합니다. 나는 소스 코드가 없다. 몇 가지 방법을 시도했지만 모두 빈 파일이되었습니다. 출력 리디렉션이 없으면 모든 것이 잘 작동합니다 (콘솔 메시지가 표시됨).특정 프로그램에서 출력 리디렉션이 작동하지 않습니다.

progname > out.txt 
progname > out.txt 2&>1 

을 그리고 아무것도 out.txt와 콘솔에 나타납니다 :

나는 예를 들어, 시도했다.

strace로 응용 프로그램을 실행하려고했습니다. I 출력 리디렉션을 소개 할 때 더 쓰기 나 응용 프로그램이 메시지를 작성하기 전에 뭔가를 테스트하고 생각하게하는, 전혀 호출하지가,

write(1, "bla bla", 8) 

- 내가 리디렉션을 사용하지 않을 때, 나는 다음과 같은 라인을 참조하십시오. 찾고있는 응용 프로그램은 무엇입니까? 어떻게 우회 할 수 있습니까?

CentOS 5.5와 Bash를 사용하고 있습니다.

답변

5

stdin 및/또는 stdout이 tty 인 경우 strace를 기반으로 테스트하는 것 같습니다. 나는 그것을 사용한 적이 없지만 empty.sourceforge.net을 사용해 볼 수 있습니다. 프로그램의 수표를 속일만한 가짜 tty를 만드는 것이 좋습니다.

+0

감사! 작동 함 - empty -f -L out.txt progname – kshahar

9
progname > out.txt 2>&1 

편집 : 실제로 이런 짓을하고 귀하의 질문에 오타가 있었다면. 응용 프로그램이 출력이 TTY인지 확인하는 것이 가능할 수 있습니다.

Edit2가 :가 좋아, 그 경우에, 데비안/우분투에서 script -qc progname > out.txt > 2>&1

, script 시도는 필수 패키지입니다 항상 설치 bsdutils 패키지의 일부입니다.

+0

오른쪽에는 질문에 오타가 있습니다. 하지만 어쨌든, 나는 응용 프로그램이 stdout을 사용하고 있다는 것을 알고 있습니다. TTY를 확인하면 출력 메시지를 어떻게 가져올 수 있습니까? – kshahar

1

시도는에 인쇄하는 하나의 볼을 한 번에을/dev/null에 하나의 스트림을 리디렉션 :

progname > /dev/null 
progname 2> /dev/null 

그럼 당신은 당신이 포착해야 스트림을 확인할 수 있습니다. 기술적 인 이유로 일부 프로그램은 stdout에 정보 메시지까지도 출력합니다.