web-dev-qa-db-ja.com

ターミナルに表示されているものをすべて読む

ターミナルに何かを書き込むターミナルアプリケーションを作成しています。そしてそれをテストするために、私は本当にターミナルに実際に表示されているものをテストする必要があります。どういうわけか、端末に実際に表示されているデータを読み取る方法はありますか?

端末はどこかにあるファイルでなければならないので、そこにあるものを読み取る方法が必要です。

cat /dev/tty

そこにあるデータのストリームを私に与えているようです。しかし、私はキーストロークを見たくありません。私が書いたものだけです。

2
rakim

1つのオプションは、追跡するすべてのコマンドの前にteeツールを使用することです。このようにして、すべての出力を選択したログファイルに保存できます。

以下の例を参照してください。ここでは、すべてのbash出力をlog.txtというテキストファイルに保存しています。

bash | tee log.txt
echo 'hello world'
ls
exit
cat log.txt

完了したら、CTRL+Dを使用して新しいBASHセッションを終了するか、単にexitと入力します(上記の例を参照)。

ターミナルに実際に渡されるコマンドのみを探している場合(これが元の質問で望まれていたものかどうかはわかりませんでした)、いつでもhistoryを実行するか、~/.bash_historyを確認できます。

1
Jason K Lai

いくつかのターミナルプログラムは画面ダンプを提供しますが( xterm など)、ほとんどは提供しません( 画面からファイルへの既存のコマンドラインテキスト?(非グラフィカル)を参照) Linux) たとえば)。 gimpなどのツールを使用してスクリーンショットを作成することはできますが、実際のキャラクターが何であるかはわかりません。開発のために、私はそれを知る必要があります。

scriptを使用して出力をTypeScriptに記録します。画面にcat戻すことができます(または、エスケープシーケンスが十分に単純な場合はless -Rを使用します)。より複雑なものや長いトレースには、他のツールを使用します。

  • slowcatcatの進行を遅くします
  • vile-pager エスケープを読み取り可能な形式にフィルタリングする(less —カラーシーケンスよりも優れている)行間で機能しますが、それでも1行のカーソル移動に制限されます)。これは、 vi-like-emacs を使用し、特別な目的で tility を使用するフィルターです。

違いを説明するために、Debianマシンの1つでless -rを実行したときのTypeScriptファイルのapt-get updateのスクリーンショットを次に示します。

enter image description here

対照的に、vile-pagerは、テキストが上書きされた場所を強調表示します。

enter image description here

いずれにせよ(少ないか下品か)、アプリケーションがカーソルを画面上で動かした場合、出力を確認する唯一の方法はcat/slowcat/etcを使用することです。

3
Thomas Dickey