2014-04-08 7 views
2

리눅스 시스템에 모든 출력 (stdout, stderr)을 파일로 저장하도록 지시하는 방법이 있습니까? 리디렉션, 파이프 또는 수정을 사용하여 scrip이 호출되는 방식을 설명합니다.리눅스 모든 파일에 출력

출력을 위해 Linux에 파일을 사용한다고 말하십시오. 예를 들어

: 스크립트 test1.sh : 내가보고 싶은 (교체 아웃 재 지정 또는 파이프) "./test1.sh"처럼 실행하면

#!/bin/bash 
echo "Testing 123 " 

"테스트 123" 파일 (/ tmp/linux_output)

문제점 : 시스템에서 바이너리가 스크립트를 호출하고이 스크립트는 다른 많은 스크립트를 호출합니다. 각 호출을 수정할 수는 없으므로 Linux를 수정하여 "출력"을 파일에 저장하면 로그를 검토 할 수 있습니다. 터미널에서 프로그램을 실행하는 경우

답변

5
#!/bin/bash 
exec >file 2>&1 
echo "Testing 123 " 

당신은 더 약 exechere

+0

scrip을 수정해야합니다. 어떤 스크립트 나 응용 프로그램이 콘솔 화면이 아닌 파일에 저장되는지 확인하고 있습니다. – FCa

+0

@FCa, 아니요,이 작업은 * 중간 * 스크립트에서 수행 할 수 있기 때문에 스크립트를 수정할 필요가 없습니다. –

0

을 읽을 수, 명령 스크립트를 사용할 수 있습니다. 하위 셸이 열립니다. 당신이해야 할 일을하십시오. 터미널의 모든 출력을 파일로 복사합니다. 완료되면 쉘을 종료하십시오.^D, 종료하십시오. 리디렉션이나 파이프를 사용하지 않습니다.

0

터미널의 스크롤 백 버퍼를 많은 수의 줄로 설정 한 다음 버퍼에있는 명령의 모든 출력을 볼 수 있습니다 - 터미널 창과 메뉴의 옵션에 따라 거기에 옵션이있을 수 있습니다 터미널 I/O를 파일로 캡처합니다.

0

약간의 오해를 기반으로하기 때문에 문자 그대로 취해진다면 실용적이지 않습니다. 근본적으로 출력을 파일로 가져 오려면 을 무언가로 바꾸어 무언가를으로 변경해야합니다. 이는 리터럴 제약 조건을 위반하게됩니다.

그러나 실제 문제는 해결할 수 있습니다. 자식에서 명시 적으로 반대하지 않는 한 부모 프로세스에 구성된 출력 방향은 입니다. 따라서 셸이나 사용자 지정 시작 프로그램 또는 중개자를 사용하여 리디렉션을 한 번만 설정하면됩니다. 그 후에 그것은 계승 될 것입니다.

따라서, 예를 들어 :

cat > test.sh

#/bin/sh 
echo "hello on stdout" 
rm nosuchfile 
./test2.sh 

그리고 아이 스크립트가

cat > test2.sh

#/bin/sh 
echo "hello on stdout from script 2" 
rm thisfileisnteither 
./nonexistantscript.sh 

실행을 표준 출력과 표준 에러 모두를 리디렉션 최초의 스크립트를 호출 할 수 (배쉬 버전 - 당신이 할 수있는 내가 N 등의 출력은 다음 EXEC 리디렉션 C 프로그램()의 실제 프로그램)

./test.sh &> logfile

지금 파일을 검사하고 모두 부모 와 자식의 표준 출력 및 표준 오류의 결과를 참조를 작성하여 많은 방법.

cat logfile 물론

hello on stdout 
rm: nosuchfile: No such file or directory 
hello on stdout from script 2 
rm: thisfileisnteither: No such file or directory 
./test2.sh: line 4: ./nonexistantscript.sh: No such file or directory 

당신이 정말 싫어하는 경우, 당신은 항상 항상 커널을 수정할 수 있습니다 - 그러나 다시, 그 (너무 매우보기 흉한 솔루션) 뭔가을 변화하고 있습니다.