我主要使用 GNU 屏幕来运行一些初始输入后变得非交互式的命令。
我不喜欢在屏幕会话中导航输出,我觉得这有点错误。
有没有办法无需访问屏幕会话的历史记录screen -r
? (不确定这里的术语是否正确,我只是指屏幕会话中发生的所有输入和输出,而不是在 shell 提示符中输入的命令意义上的历史记录)。
理想情况下,我想使用 (1) bash/Linux 内置函数、(2) else 本身screen
、(3) else 使用 Python 包、(4) 并且仅当这些都无法通过外部程序实现时才执行此操作。
(1:例如cat /run/screen/S-user/12345.pts-1.pc
2:例如screen --cat 12345
3:例如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 }