쉘 스크립트에서 발생하는 모든 활동을 파일에 기록하는 쉬운 방법이 있습니까?
스크립트가 있습니다. echo “instructions”뿐만 아니라 다른 프로그램 출력도 출력합니다. 나는 명령을 알고있다 :
command | tee -a "$log_file"
과
command >> logifle.log
내가 묻는 것은 로깅을위한 쉘 매개 변수가 있는지 또는 내가 사용할 수있는 set 명령 또는 그와 비슷한 것입니다. 필연적으로 파일에 수십 개의 리디렉션 또는 티를 추가하고 싶지는 않습니다. 그래도 여전히 std 출력을 얻고 싶습니다-또한 로그를 원합니다. : wq
답변
일반적으로으로 스크립트를 실행하는 경우으로 스크립트를 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
.
답변
매우 쉽고 편리한 방법이 있습니다.
script
터미널 세션의 타이프 스크립트 작성에 사용
-
명령을 시작하십시오
script
file
예를 들어script ~/tmp/output
, 인수 가 주어지면script
대화를이 파일에 저장합니다. 파일 이름을 지정하지 않으면 대화 상자가 파일에 저장됩니다typescript
-
스크립트를 시작하거나 원하는 것을 시작하십시오
-
스크립트가 완료되면 –
script
를 통해 중지CtrlD -
기본 출력 파일에서 출력 확인
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 쉘이 사용됩니다. 대부분의 쉘은이 변수를 자동으로 설정합니다.