读取 GNU 屏幕会话而不附加它

读取 GNU 屏幕会话而不附加它

我主要使用 GNU 屏幕来运行一些初始输入后变得非交互式的命令。

我不喜欢在屏幕会话中导航输出,我觉得这有点错误。

有没有办法无需访问屏幕会话的历史记录screen -r (不确定这里的术语是否正确,我只是指屏幕会话中发生的所有输入和输出,而不是在 shell 提示符中输入的命令意义上的历史记录)。

理想情况下,我想使用 (1) bash/Linux 内置函数、(2) else 本身screen、(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 }

相关内容