標準出力(ターミナルに送信)をキャプチャし、端末(ユーザー用)出力後にいくつかの処理を実行したいと思います。
出力を取得し、処理し、それに応じて変更する方法を知りたいです。
(可能であれば)端末に入力するすべてのコマンドに対してこれを行うことを願っています。
編集:一時チャットフォーラムで会話をした後は明らかです。
私たちはしなければならない
- どちらもどのコマンドが実行されたかを探します。
- コマンドの出力は何ですか
特定のコマンドまたは出力が検出されると、特定のタスクを実行します。
答え1
まあ、多分そうかもしれません。いいえ出力を取得して処理して表示する良いアイデアすべて端末に入力するコマンドです。
ただし、一部の特定のコマンドについては、次のようにすることができます。tee
your-command | tee saved-output | processing-tool
処理ツールの結果を表示する場合saved-output
(出力が短い場合)または(出力が長い場合)を使用して例を表示できます。cat
less
例:
$ LANG=C sudo lshw | tee saved-output | grep -i -A2 disk
*-disk
description: ATA Disk
product: KINGSTON SKC300S
physical id: 0.0.0
--
*-disk
description: ATA Disk
product: WDC WD4002FYYZ-0
vendor: Western Digital
$ less saved-output
一時チャットフォーラムで会話をした後、私が提案した
- 以下のリンクをたどってみ
vialog
てください。viafifo
- この例では、意図したことを達成するためにそのうちの1つを変更することもできます。
- どちらもどのコマンドが実行されたかを探します。
- コマンドの出力は何ですか
特定のコマンドまたは出力が検出されると、特定のタスクを実行します。
vialog
以下の例のように直接使用してください。
vialog 2>&1 | tee saved-output | grep 'docker container ls' && echo 'it was mentioned'
実際の状況では、これよりも進化したものから始めたいと思いますが、echo 'it was mentioned'
これはデモ例に過ぎません。警告の特定のチェックを作成しvialog
て警告を無効にすると、状況がより効率的になります。これはあなたの場合には必要ないかもしれません。
会話のスクリーンショット:
会話後のスクリーンショット:
これにより、呼び出されたコマンドが見つからないことを簡単に確認できます。
$ LANGUAGE=C vialog 2>&1 | tee saved-output | grep -i 'Command.*not found' && echo 'it was mentioned'
Command 'docker' not found, but can be installed with:
it was mentioned
$ cat saved-output
----- start vialog at 2019-01-12 18:57:33 ----------------------------
$ docker container ls
Command 'docker' not found, but can be installed with:
sudo apt install docker.io
$ exit
exit
------- end vialog at 2019-01-12 18:58:01 --- used 28 seconds