我想制作一个 shell 脚本来复制 GUI 终端仿真器的过去输出(例如,最后 20 行)。动机如下:
当我执行一个需要很长时间的程序时(例如,下载一个非常大的文件,或者转换一个非常大的电影文件),我有时会想起另一个工作,我不得不离开房间。在这种情况下,我按 ctrl+z 停止该过程。我输入
fg; echo $? >> log.txt; date >> log.txt; systemctl poweroff
然后我离开房间。
这种方式有效而且还不错。但它有一个缺点,我无法读取程序的输出。我只能知道状态($?)。所以我想复制最后 20 或 40 行并将它们保存在日志文件中。
nohup
首先使用或运行您的screen
命令tmux
。当然,如果您已经开始您的流程,这将无济于事。如果是这种情况,您可以使用以下命令捕获命令的输出
strace
:(替换
<PID>
为PID
您的流程)如果
strace
无法附加到该进程,您可能需要以root
/ 的身份运行sudo
或将您的 ptrace 设置更改为0
(并注意它的安全隐患!):然后,您可以将该输出重定向到文件。
还有其他选项,例如
gdb
orreredirect
。请参阅此处或此处。