従来のシェルの作業ドラフト:
ttyid=$(readlink /proc/$$/fd/1)
\___/ \______/ \___/ | | |
| | | | | \- 0: stdin
| | | | | 1: stdout <- our interest
| | | | | 2: stderr
| | | | \- fd is, maybe, filedescriptor
| | | |
| | | \- $$ is the PID of the current process (shell,
| | | in our case)
| | |
| | \- you know, much runtime stuff is here
| |
| \- readlink extracts the symbolic link of /proc/$$/fd/1
| lrwx------ 1 stefan stefan 64 2011-03-18 09:11
| /proc/22159/fd/1 -> /dev/pts/4
|
\- /dev/tty3 for real shell, /dev/pts/3 for xterm
これで、画面をファイルに接続できます。sudoが必要です。
id=${ttyid//\/dev\/tty}
sudo cat /dev/vcs$id > screen.dump
Apropos screendump
:そのため、名前の付いたプログラムはもう機能しません。おそらく古いカーネルのみ。/ dev / pts / Nも私には機能しませんでした。/ devにあるオプションのMKDEVが必要な/dev/cuaN
場合があります。一部については暗く覚えていますが、間違っている可能性があります。
screen.dumpを使用する代わりに出力をパイプしたいと思います。しかし、どういうわけか機能しません-時にはENTERを待ちます。
キャプチャは、改行を含む通常のテキストファイルではなく、たとえば、1つのシーケンスで80x50文字を使用します。
最後の2行(コマンドの出力用とプロンプト行用)を選択するには、それを元に戻し、160文字を選択し、再び元に戻し、80を選択します。
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
あなたが疑問に思った場合に備えて、なぜrev
プログラムがあるのか。
批評:
- 最初のコマンドが入力されるため、行が移動します。さて-最後の3行目か何かを選ぶための単なる数値の練習問題です。主に別のウィンドウで作業しました。
- 誰もが80x50の画面を持っているわけではありません。まあ、はい、知っています。あなたの喜びのために$ COLUMNSと$ ROWSがあります。
- 出力は常に最下部にあるわけではありません。新鮮で若い貝が上の列にあるかもしれません。さて-簡単です:実行中のシェルを評価します。使用されるプロンプト。プロンプトの検出をいくつか行い、シェルプロンプトで最後の行を見つけます。前の行(または前の2.)にディレクトリが含まれている必要があります。
最初の図は、explain.pyで作成されています