2010-03-13 4 views
6

제어 할 수없는 코드와 콘솔 출력을 볼 수없는 코드로 호출되는 특정 중요 bash 스크립트가 있습니다. 이 스크립트가 나중에 분석하기 위해 수행 한 작업의 전체 추적을 원합니다. 이렇게하려면 각 스크립트를 자체 추적하고 싶습니다. 현재 수행중인 작업은 다음과 같습니다.bash 스크립트를 자체 추적하는 더 나은 방법은?

#!/bin/bash 
# if last arg is not '_worker_', relaunch with stdout and stderr 
# redirected to my log file... 
if [[ "$BASH_ARGV" != "_worker_" ]]; then 
    $0 "[email protected]" _worker_ >>/some_log_file 2>&1 # add tee if console output wanted 
    exit $? 
fi 
# rest of script follows... 

더 좋고 깨끗한 방법이 있습니까?

답변

12
#!/bin/bash 
exec >>log_file 2>&1 

echo Hello world 
date 

exec는 재 지정에 대한 마법의 행동을 가지고 "

또한 기존 솔루션에 대해서는 exec "$0""$0"; exit $?보다 낫습니다. 전자는 서브 프로세스가 종료 될 때까지 여분의 셸 프로세스를 남기지 않기 때문입니다.

+0

가장 우수! 나는 단지 더 우아한 방법이 있어야한다는 것을 알았다. 고마워, 케빈. 이것은 즉시 사용으로 갈 것입니다 ... –

+1

또한 현재 터미널에 출력하고 파일에 로그 할 수 있습니까? 나는''exec'와 함께'tee'를 사용하려했지만 아무런 방법도 찾지 못했습니다 .. –

+1

[이 질문에] 나는 링크하고 싶습니다 (http://stackoverflow.com/questions/3173131/redirect-copy-of-stdout-to -log-file-within-bash-script-itself) 스크립트 내에서 명령 된 출력을 볼 수 있고 로그 할 수도 있습니다! –

2

어쩌면 당신은 set -x을 찾고 계십니까? 반환 상태를 명령를 지정하지 않으면, 어떤 리디렉션은 현재 쉘에 적용 "및 리디렉션 오류가 발생하면 반환 상태는 0입니다 :

+0

@aaa : 그래, 나에 대해 알고 "set -x"- 위의 "나머지 스크립트 # 부분"에서 가끔 사용하는 것들 중 하나입니다. 나는 그것을 언급해야만했다. 그렇게 해줘서 고마워. –

0

bash를 지원하는 일반적인 오픈 소스 추적 라이브러리를 점검 할 수 있습니다. 곧 http://sourceforge.net/projects/utalm/

  • http://www.unifiedsessionsmanager.org/en/downloads.html
  • 현재 사용 가능한 구성 요소가 bash에 의해 스크립트입니다

    • 는 ++ 파이썬과 C입니다. 따라가는 추가는 다음과 같습니다 루비, 자바, 자바 스크립트, SQL, PowerShell을 ...

      라이센스는 아파치 2.0

      WKR 아르노-CAN Uestuensoez입니다

    관련 문제