1. 特定の端末を使用する
この問題に対処する最初の方法は、出力をファイルに保存することをサポートするターミナルを使用することです。例えば、KDE の標準インストールに付属している Konsole ターミナルには、出力をファイルに書き出すオプションがあります。
これを行うには、メニューバーの「File」ボタンを押し、「Save output as …」をクリックします。 をクリックします。 ターミナル出力を保存するためのウィンドウダイアログが表示されます。ここから、ファイルを保存する場所を選ぶことができます。 GNOME 端末のコマンドの出力を保存することもできます。ターミナルを右クリックして、 “Copy output as HTML” を押すだけです。そうすると、ターミナルのテキストがクリップボードに読み込まれます。そこから、任意のテキストエディタに貼り付けることができます。2. 出力のリダイレクション
もう一つの対処法は、UNIXシェルの組み込み演算子を使うことです。これらはLinuxのデフォルト関数で、プログラムのテキスト出力をファイルにリダイレクトすることができます。これを実現する演算子は3つあります。
>
オペレータは、ファイルの内容をプログラムの出力で作成するか、置き換えます。これは、プログラムの現在の結果を同じファイルにダンプして表示したい場 合に便利です。- また、
>>
演算子もプログラムの出力をファイルとして作成します。しかし、この演算子は出力を置き換えるのではなく、追加するだけです。これは、プログラムの結果を連続して一つのファイルにダンプしたい場合 に便利です。 - 最後に、
2>
演算子は特別なタイプの演算子で、エラーを出力し、それを報告します。これは、プログラムがクラッシュする前に遭遇した問題を表示するため、デバッグの際に非常に便利です。
それを知った上で、これらの演算子を使う方法は、プログラムの末尾に追加することです。次のような例を考えてみましょう。
echo "maketecheasier" > hello.txt
echoプログラムに "maketecheasier" という単語を出力するように指示し、次に
>` 演算子とファイル名を追加しました。これはUNIXシェルに、出力を画面に印刷するのではなく、“hello.txt “ファイルに書き出すように指示したのです。
3. ティー
出力のリダイレクトとは別に、tee
というプログラムを使って、ターミナルコマンドの 出力を保存することができます。これは標準入力からの読み込みと標準入力への書き込みを可能にする GNU プログラムです。このプログラムをUNIXのパイプと一緒に使って、コマンドの出力をファイルに書き出すことができます。
echo "maketecheasier" | tee hello.txt
ここでは、出力リダイレクトを使う代わりに、出力を tee
にパイプ(|
)しています。
注意: パイプは、あるプログラムの出力を別のプログラムの入力に取り込みます。注意**: パイプはあるプログラムの出力を別のプログラムの入力に取り込みます。これによって、複数のプログラムが標準的な入出力を使っている限り、複数のプログラムを結合することができます。
4. スクリプト
ターミナルから出力を引き出すもう一つの方法は script
を使うことです。これは、ターミナルにタイプしたものすべてと、その出力を記録する Linux 組み込みのプログラムです。
スクリプト filename.txt
これでスクリプト環境が起動し、コマンドを実行し始めることができます。しかし、注意すべき重要なことは、script はそのセッションであなたが行ったすべてのことを記録するということです。次の例を見てください。
Script started on 2022-03-27 18:02:29+08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"] スクリプトは2022-03-27 18:02:29+08:00に始まりました。
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls
[?2004l
[0m[01;34mDesktop[0m [01;34mDownloads[0m [01;34mmail[0m [01;34mNews[0m [01;34mpods[0m [01;34mdocuments[0m [00;32mhello.txt[0m [01;34mMail[0m [01;34mstmp [0m [01;34mvids[0m
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit
[?2004l
終了
Script done on 2022-03-27 18:03:19+08:00 [COMMAND_EXIT_CODE="0"] こんな感じです。
スクリプトには、押したキー操作と制御文字がすべて含まれます。私の場合、Tab
キーやBackspace
キーなど、押した「見えない」キーがすべて含まれます。
セッションが終了したら、exit
とタイプしてください。これでスクリプトプログラムが終了し、指定したファイルにログが全て書き込まれます。
5. フレームバッファ端末のキャプチャ
最後に、Linuxのフレームバッファから引っ張ってきて、ターミナルの出力を取得することもできます。これはテレタイプで直接作業をしていて、プログラムの出力をキャプチャしたい場合に便利です。
フレームバッファデバイスをキャプチャするには、テレタイプにいる間に次のコマンドを実行します。cat /dev/fb0 > capture.raw
注意すべき重要なことは、この方法でフレームバッファデバイスをキャプチャするということは、フレームバッファの生のバイトをファイルにダンプしていることになるということです。このファイルを表示するには、画像エディタで読み込んで、色とビット深度を手動で調整する必要があります。この作業は時間がかかるだけでなく、間違えやすいものです。
そこで、fbgrabのようなサードパーティ製のプログラムを使って対処する方法があります。これは、フレームバッファデバイスから現在のテレタイプ画面を取得し、PPMまたはPNGファイルのいずれかにダンプします。 fbgrabのインストールも比較的簡単です。DebianやUbuntuベースのディストリビューションでは、aptを使用することができます。sudo apt install fbgrab
Arch Linux では、pacman を実行してください。
sudo pacman -S fbgrab
fbgrab を使って端末の出力をキャプチャする
インストールしたら、Control
+ Shift
+ Alt
+ F3
でテレタイプにドロップし、fbcat
または fbgrab
を実行してください。
fbcat > capture.ppm
これは、現在表示されている画面を取り込んで、その内容をcapture.ppmファイルにダンプします。
一方、Fbgrab は、より高いビット深度のディスプレイをキャプチャするために設計された、より複雑なプログラムです。ほとんどの場合、テレタイプの画面をキャプチャするために使用します。デフォルトでPNGへの保存をサポートしており、キャプチャするテレタイプを別に選択するオプションもあります。 fbgrab プログラムを使ってキャプチャするには、次のコマンドを実行します。sudo fbgrab -c 3 capture.png
これで3つ目のテレタイプの画面が取り込まれ、capture.pngファイルに保存されます。
Linux ターミナルに関する他のガイドをお探しの場合は、 コマンドラインからメールを送信する方法について説明しているものをご覧ください。よくある質問
1. 助けて! Fbgrab がうまくいきません; 画像は黒か空白だけです。
これはおそらく、fbgrab が端末の出力をキャプチャするために別のフレームバッファデバイスを使っているためです。dev” フォルダをリストアップして、システムが現在使っているフレームバッファデバイスをチェックしてください。
ls /dev
そこから、"/dev/fbX” デバイスを探します。通常、Linuxはフレームバッファに"/dev/fb0 “を使用します。しかし、もしあなたのシステムが “/dev/fb1” のような別のフレームバッファを使っているなら、次のコマンドを渡すことで、fbgrab にそのフレームバッファから代わりに取り出すように指示することができます。
fbgrab -d 1 capture.png
2. プログラムの入力として書いたファイルの内容を取り込むことは可能ですか?
はい!できます。上で説明した 3 つの演算子とは別に、<
演算子を使ってファイルからデータを取り出すことができます。この場合、シェルはこれをプログラムへの入力として扱います。
[1] cat test.txt | プログラム
[2] プログラム < test.txt
- 最初の例では、cat プログラムを呼び出してテキストを読み込み、cat の出力を パイプ演算子でロードしてあなたのプログラムへパイプします。
- 一方、2番目の例では、すぐにプログラムを呼び出し、次の引数を入力とする
<
演算子を選択します。
3. 3. スクリプトに、コマンドの出力だけを取り込ませる方法はありますか。
はい、1つのコマンドに対してのみスクリプトを実行することが可能です。これは、トラブルシューティングの際に、1つのプログラムの出力だけをキャプチャしたい場合に非常に便利です。次のコマンドを実行してください。
script -c "あなたのコマンド" test.txt
c** フラグはスクリプトプログラムに your-command というプログラムだけを実行するように指示します。そこから、test.txtと呼ばれるテキストファイルに出力を書き込みます。
画像クレジット: Unsplash