첨부하지 않고 GNU 스크린 세션 읽기

첨부하지 않고 GNU 스크린 세션 읽기

나는 주로 초기 입력 후 비대화형이 되는 일부 명령을 실행하기 위해 GNU 화면을 사용합니다.

저는 스크린 세션에서 출력을 탐색하는 것을 좋아하지 않습니다. 약간 잘못된 것 같습니다.

스크린 세션 기록에 액세스하지 않고 이를 수행할 수 있는 방법이 있습니까 screen -r? (여기서 용어가 올바른지 확실하지 않습니다. 쉘 프롬프트에 입력된 명령의 기록이 아니라 스크린 세션에서 발생한 모든 입력 및 출력을 의미합니다.)

screen이상적으로 는 (1) bash/Linux 내장, (2) else 자체, (3) else Python 패키지 사용, (4) 이 중 어느 것도 외부 프로그램을 통해 가능하지 않은 경우에만 이 작업을 수행하고 싶습니다. .

(1: 예 cat /run/screen/S-user/12345.pts-1.pc2: 예 screen --cat 123453: 예 pip install screen; python -c 'import screen;print(screen.read_socket("12345"))'4: 예 sudo apt install screenreader; screenreader 12345)

답변1

expect세션 트랜잭션은 일부 초기 대화형 입력 후에 기록되고 무인 상태로 남을 수 있습니다. 이를 통해 명령을 실행하고 상호 작용한 다음 프로그램이 종료될 때까지 입력 ~.하여 명령에 전달할 수 있습니다. expect그동안 out.1535209800확인하거나 뭐든 할 수 있습니다.

#!/usr/bin/env expect
log_file out.[clock seconds]
spawn -noecho sh  ;# here be the command to run
interact {
  ~. { return }   ;# type this when done interacting
  ~~ { send "~" } ;# or this to get a literal ~ in the shell
}
if {[catch {
  expect {
    eof { exit }
    match_max { exp_continue }
    timeout { exp_continue }
  }
} oops ]} { puts stderr $oops; exit 1 }

관련 정보