쉘 스크립트가하는 모든 활동을 기록하는 쉬운 방법이 있습니까?


18

쉘 스크립트에서 발생하는 모든 활동을 파일에 기록하는 쉬운 방법이 있습니까?

스크립트가 있습니다. echo "instructions"뿐만 아니라 다른 프로그램 출력도 출력합니다. 나는 명령을 알고있다 :

command | tee -a "$log_file"

command >> logifle.log

내가 묻는 것은 로깅을위한 쉘 매개 변수가 있는지 또는 내가 사용할 수있는 set 명령 또는 그와 비슷한 것입니다. 필연적으로 파일에 수십 개의 리디렉션 또는 티를 추가하고 싶지는 않습니다. 그래도 여전히 std 출력을 얻고 싶습니다-또한 로그를 원합니다. : wq


5
LOL, : wq in vim '
j0h

1
X : 그것은 대부분의 사람들이 대신 그렇게하는 것 나의 마음을 놀라게한다
모니카 사과 및 복원

답변:


18

일반적으로으로 스크립트를 실행하는 경우으로 스크립트를 foo.sh실행하십시오 (bash 스크립트라고 가정) bash -x foo.sh. 모든 것을 파일로 리디렉션하려면 시도하십시오 bash -x foo.sh > file.log 2>&1(stderr도 리디렉션하고 있습니다 2>&1. 원하지 않는 경우 제거하십시오 ). 진행 상황을 확인하려면을 (를) 참조하십시오 bash -x foo.sh 2>&1 | tee log.file.


20

매우 쉽고 편리한 방법이 있습니다.

script터미널 세션의 타이프 스크립트 작성에 사용

  1. 명령을 시작하십시오 script

    file예를 들어 script ~/tmp/output, 인수 가 주어지면 script대화를이 파일에 저장합니다. 파일 이름을 지정하지 않으면 대화 상자가 파일에 저장됩니다typescript

  2. 스크립트를 시작하거나 원하는 것을 시작하십시오

  3. 스크립트가 완료되면 - script를 통해 중지CtrlD

  4. 기본 출력 파일에서 출력 확인 typescript


로 한 단계에서 명령을 시작하려면 script매개 변수를 사용하십시오.-c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

셸을 포크하거나 새 셸을 시작 script하기 때문에 스크립트 내부 의 사용법은 의미가 없습니다 script.

SHELL 변수가 존재하면 스크립트에 의해 분기 된 쉘이 해당 쉘이됩니다. SHELL을 설정하지 않으면 Bourne 쉘이 사용됩니다. 대부분의 쉘은이 변수를 자동으로 설정합니다.


4
@Fabby 나는 대답이 마음에 들지만 작은 회색의 것을 보지 못한다;)
AB

을 사용 script logfilename하므로 선택합니다.
waltinator

쉘 프로그램에서 "스크립트"를 호출 할 수 있습니까?
j0h

1
이것은 말이되지 않습니다. 향상된 답변을 참조하십시오.
AB

1
+1. 이 답변에 감사드립니다 :-) script는 fifo를 통한 모니터링에도 유용합니다. From man script: " -f, --flush각 쓰기 후 출력을 플러시합니다. 이것은 원격 통신에 유용합니다. 한 사람은 mkfifo foo; script -f foo하고 다른 사람은 cat foo"를 사용하여 수행중인 작업을 실시간으로 감독 할 수 있습니다 . " 또한 프로그램이 입력 대기중인 시간을 모니터링하거나 예를 들어 fifo의 타임 스탬프를 모니터링하여 모니터링하는 데 사용할 수 있습니다.
sudodus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.