터미널 출력을 파일에 자동으로 캡처하는 방법

Sep 23 2020

다음 script과 같은 명령을 실행하는 한 터미널 창에 작성된 모든 내용을 캡처하는 데 사용할 수 있습니다 .

export NOW=$(date +%Y%m%d-%H%M%S) /usr/bin/script ~/history/output/$NOW.shell.out

여기서 가장 큰 문제는 터미널 창이 열릴 때마다 수동 개입이 필요하다는 것입니다. 이는 누군가가 어깨 너머로 밀고 서두르면 쉽게 잊혀 질 수 있습니다. 이 명령을 끝에 넣으려고 하면 실행 이 완료 .bashrc되면 출력 파일이 생성되고 닫히고 .bashrc실행이 종료됩니다 script. &백그라운드에서 실행하기 위해 줄 끝에 놓으면 script실행 상태가 유지되지만 터미널과 연결이 끊어져 아무것도 기록되지 않습니다.

또한 예를 들어 Select All터미널 Edit메뉴에서 스크롤 백 버퍼에서 복사하여 파일에 쓸 수 있다는 것도 알고 있습니다 . 내가 만난 실패 모드는 다음과 같습니다.

  1. exit서브 쉘에 있다고 생각할 때 명령 프롬프트에 입력 하면 터미널이 종료 될 때 스크롤 백 버퍼가 사라집니다.
  2. 터미널 크래시 (예 : 무제한 스크롤 백 버퍼가 있고 memcpy실패하여 SEGFAULT가 발생 함) 열려 있던 모든 창에 대한 스크롤 백 버퍼가 사라집니다.
  3. 감독자가 더 나은 도구라고 생각한 MidnightCommander Close의 Close버튼을 누르 려고 할 때 터미널 버튼을 누르면 스크롤 백 버퍼가 사라집니다.
  4. 노트북 배터리가 소모되고 노트북이 종료되며 여러 터미널 스크롤 백 버퍼가 동시에 사라집니다.

시작할 때 사용자 지정 명령을 실행하도록 터미널을 구성했지만 다음과 같이 작동하지 않았습니다.

export NOW=$(date +%Y%m%d-%H%M%S); /usr/bin/script /path/to/home/history/output/$NOW.shell.out
bash | tee /path/to/home/history/output/$(date \+\%Y\%m\%d-\%H\%M\%S).shell.out

(후자의 경우, 작업에 가까운 무언가를 얻었을 때 $(date출력 디렉토리에 이름이 지정된 파일로 끝났지 만 길이가 0 인 파일로 남아있었습니다.)

내가 찾고 script있는 것은 로그인 세션이 시작될 때마다 (예 : 터미널 창이 열릴 때) 자동으로 같은 것을 시작하는 방법으로 , 고유 한 이름의 로그 파일을 내 output디렉토리에 기록 하여 더 나은 기회를 가질 수 있습니다. 터미널에서 스크롤 백 버퍼를 저장할 수없는 오류가 발생했을 때 데이터 손실을 방지합니다.

답변

raj Sep 23 2020 at 20:58

질문 상단에 지정한 두 명령을 쉘 스크립트에 넣으십시오. 예를 들어 스크립트를 넣으십시오 /path/to/home/bin/recorder(물론 파일은 실행 가능해야 #!/bin/sh하며 처음 에 삽입하는 것을 잊지 마십시오 ).

그런 다음 gnome-terminal에서 기본 프로필을 편집하고 시작시 실행할 명령을 /path/to/home/bin/recorder로 설정 한 다음 "명령이 끝날 때 수행 할 작업"옵션을 "터미널을 열어 둡니다"(죄송합니다. 다른 언어를 사용하고 있습니다) 우분투 버전이므로 현재 창에 표시되는 실제 영어 설명은 약간 다를 수 있습니다.) 나는 그것을 확인했고 그것은 나를 위해 일했습니다.