스크립트: 출력 및 종료 코드 로깅

스크립트: 출력 및 종료 코드 로깅

script명령은 전체 셸 세션을 파일에 기록합니다. 이것은 훌륭하지만 세션을 볼 때 내가 실행하는 각 명령에 대한 종료 코드를 볼 수 있기를 원합니다.

script이를 로그에 캡처 할 수 있나요 ? 이상적으로는 세션 사용자에게 표시되지 않아야 script하지만 필요한 경우 허용됩니다.

실행 스크립트 예시:

me:~ oliverlade$ script
Script started, output file is typescript
bash-3.2$ echo "hello"
hello
bash-3.2$ true
bash-3.2$ false
bash-3.2$ exit
exit

Script done, output file is typescript

로그 파일 내용:

me:~ oliverlade$ cat typescript
Script started on Sun Aug  7 13:02:43 2016
bash-3.2$ echo "hello"
hello
bash-3.2$ true
bash-3.2$ false
bash-3.2$ exit
exit

Script done on Sun Aug  7 13:03:03 2016

내가 원하는 것:

me:~ oliverlade$ cat typescript
Script started on Sun Aug  7 13:02:43 2016
bash-3.2$ echo "hello"
hello
(exit 0)
bash-3.2$ true
(exit 0)
bash-3.2$ false
(exit 1)
bash-3.2$ exit
exit

Script done on Sun Aug  7 13:03:03 2016

답변1

script매뉴얼 페이지 에서 :

-e, --return

"하위 프로세스의 종료 코드를 반환합니다. bash 종료와 동일한 형식을 사용하면 신호 종료 종료 코드가 128+n입니다. "

이를 사용해야 하는 경우 script마지막 종료 코드를 확인하는 가장 좋은 방법은 이를 쉘 프롬프트에 추가하는 것입니다. 어쨌든, 이렇게 하는 것은 나쁜 생각이 아닙니다.

답변2

마지막으로 실행된 명령( )의 종료 상태를 $?기본 프롬프트( PS1)에 병합할 수 있습니다.

한 가지 예:

$ PS1='$? \$ '
0 $

테스트해보세요:

0 $ false
1 $

$?에 할당할 때 확장을 방지하려면 작은따옴표를 사용해야 합니다 PS1. 프롬프트 변수를 사용하면 안 됩니다 export.

다른 예시:

$ PS1=$'(exit $?)\n$ '
(exit 0)
$

시험:

(exit 0)
$ false
(exit 1)
$

관련 정보