쉘 스크립트: 과거 터미널 에뮬레이터 출력을 복사하는 방법은 무엇입니까?

쉘 스크립트: 과거 터미널 에뮬레이터 출력을 복사하는 방법은 무엇입니까?

GUI 터미널 에뮬레이터의 과거 출력(예: 마지막 20줄)을 복제하는 쉘 스크립트를 만들고 싶습니다. 동기는 다음과 같습니다.

시간이 오래 걸리는 프로그램(예: 매우 큰 파일을 다운로드하거나 매우 큰 영화 파일을 변환하는 등)을 수행할 때 가끔 다른 작업이 생각나서 방을 나가야 하는 경우가 있습니다. 이 경우 Ctrl+Z를 눌러 프로세스를 중지합니다. 나는 들어간다

fg; echo $? >> log.txt; date >> log.txt; systemctl poweroff

그런 다음 나는 방을 나갔다.

이 방법은 효과가 있고 나쁘지 않습니다. 하지만 단점이 있는데, 프로그램의 출력을 읽을 수 없다는 것입니다. 상태($?)만 알 수 있어요. 그래서 마지막 20~40줄을 복사해서 로그 파일에 저장하고 싶습니다.

답변1

먼저 를 사용 nohup하거나 screen명령을 실행하십시오. tmux물론 이미 프로세스를 시작한 경우에는 도움이 되지 않습니다.

이 경우 다음을 사용하여 명령의 출력을 캡처할 수 있습니다 strace.

strace -p<PID> -s9999 -e write  2>&1 | grep -o '".\+[^"]"'

( 프로세스 <PID>로 교체)PID


프로세스에 연결할 수 없는 경우 /with 또는 strace로 실행해야 할 수도 있습니다 .rootsudoptrace 설정 변경( 0그리고 보안에 미치는 영향도 알고 있어야 합니다!):

echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

그런 다음 해당 출력을 파일로 리디렉션할 수 있습니다.


gdb또는 와 같은 다른 옵션이 있습니다 reredirect.이봐또는여기.

관련 정보