シェルスクリプト:過去のターミナルエミュレータ出力をコピーする方法は?

シェルスクリプト:過去のターミナルエミュレータ出力をコピーする方法は?

GUIターミナルエミュレータの過去の出力(最後の20行など)を複製するシェルスクリプトを作成したいと思います。動機は次のとおりです。

時間がかかるプログラム(たとえば、非常に大きなファイルをダウンロードしたり、非常に大きな映画ファイルを変換するなど)を実行するときは、時々他のことを思い出して部屋を出る必要があります。この場合、Ctrl + Zを押してプロセスを停止します。私は入る

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

それから私は部屋を出ました。

この方法は効果があり悪くありません。しかし、欠点がありますが、プログラムの出力を読み取ることができないということです。状態($?)だけがわかります。そのため、最後の20〜40行をコピーしてログファイルに保存したいと思います。

答え1

まずを使用するnohupか、screenコマンドを実行してください。tmuxもちろん、すでにプロセスを開始しても役に立ちません。

この場合、次のコマンドを使用してコマンドの出力をキャプチャできますstrace

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

(プロセス<PID>と交換)PID


プロセスに接続できない場合は、/withまたはstraceで実行する必要があります。rootsudoptrace設定の変更0そしてセキュリティへの影響も知っておくべきです!):

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

その後、その出力をファイルにリダイレクトできます。


gdbまたはなどの他のオプションがありますreredirectねえまたはここ

関連情報