이것이 내가 달성하고 싶은 것입니다:
사용자가 Bash에서 실행하는 모든 명령에 대해 다음을 파일에 저장하는 스크립트를 작성하려고 합니다.
- 사용자가 입력한 전체 명령
- 명령의 종료 코드(AFAIK
script
이 코드는 제공되지 않음) - 명령에 의해 생성된 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
.