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
で実行する必要があります。root
sudo
ptrace設定の変更(0
そしてセキュリティへの影響も知っておくべきです!):
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
その後、その出力をファイルにリダイレクトできます。