Shell-Script

Shell 腳本:如何複製終端仿真器的過去輸出?

  • April 11, 2022

我想製作一個 shell 腳本來複製 GUI 終端仿真器的過去輸出(例如,最後 20 行)。動機如下:

當我執行一個需要很長時間的程序時(例如,下載一個非常大的文件,或者轉換一個非常大的電影文件),我有時會想起另一個工作,我不得不離開房間。在這種情況下,我按 ctrl+z 停止該過程。我輸入

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

然後我離開房間。

這種方式有效而且還不錯。但它有一個缺點,我無法讀取程序的輸出。我只能知道狀態($?)。所以我想複製最後 20 或 40 行並將它們保存在日誌文件中。

nohup首先使用或執行您的screen命令tmux。當然,如果您已經開始您的流程,這將無濟於事。

如果是這種情況,您可以使用以下命令擷取命令的輸出strace

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

(替換<PID>PID您的流程)


如果strace無法附加到該程序,您可能需要以root/ 的身份執行sudo將您的 ptrace 設置更改0(並註意它的安全隱患!):

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

然後,您可以將該輸出重定向到文件。


還有其他選項,例如gdbor reredirect見這里這裡

引用自:https://unix.stackexchange.com/questions/698708