하나의 스크립트에서 모든 명령줄, 종료 코드 및 stdout/stderr을 추출하는 방법

하나의 스크립트에서 모든 명령줄, 종료 코드 및 stdout/stderr을 추출하는 방법

이것이 내가 달성하고 싶은 것입니다:

사용자가 Bash에서 실행하는 모든 명령에 대해 다음을 파일에 저장하는 스크립트를 작성하려고 합니다.

  1. 사용자가 입력한 전체 명령
  2. 명령의 종료 코드(AFAIK script이 코드는 제공되지 않음)
  3. 명령에 의해 생성된 stdout 및 stderr의 내용입니다.

다음 명령을 사용하여 1과 2를 매우 빠르게 달성할 수 있었습니다.https://github.com/rcaloras/bash-preexec

3시에 막혔어요.

~/.bash_profile저는 설정을 더 쉽게 하기 위해 드롭할 수 있는 스크립트를 만들고 싶었습니다 .

미리 감사드립니다!

답변1

설명대로여기표준 출력 및 표준 오류를 파일로 캡처하는 데 사용 exec하고 &>리디렉션 할 수 있습니다.tee

내가 궁금해하는 한 가지는 명령별로 다른 캡처를 원하는지( script"명령별" 요구 사항과 사용할 수 없는 어설션에서 이해할 수 있음) 또는 전체 세션을 하나의 로그 파일에 캡처하려는 경우입니다.

후자인 경우 script세션 시작 시 실행한 다음 그 안에서 수행하는 모든 작업을 구현하면 문제가 없지만 위에 링크된 답변도 도움이 될 것입니다. 각 명령에 대해 서로 다른 파일을 갖고 싶다면 명령 프롬프트에서 트리거되는 것을 구현하고 싶을 수도 있습니다. 구현 $PROMPT_COMMAND( man bash자세한 내용은 이에 대해 자세히 설명)하고 각 명령에 대한 로그 파일을 교체하면 됩니다.

표준 스트림을 파일로 캡처할 때 exec &>기본적으로 TTY 애플리케이션(화면에 그리기) 실행이 비활성화됩니다(예: less또는 mc). 이는 전체 TTY 에뮬레이션을 수행하지 않는 한 모든 셸 수준 콘솔 캡처 도구에 적용됩니다 script.

관련 정보