コマンドの出力をキャプチャして処理し、端末に出力します。

コマンドの出力をキャプチャして処理し、端末に出力します。

標準出力(ターミナルに送信)をキャプチャし、端末(ユーザー用)出力後にいくつかの処理を実行したいと思います。

出力を取得し、処理し、それに応じて変更する方法を知りたいです。

(可能であれば)端末に入力するすべてのコマンドに対してこれを行うことを願っています。


編集:一時チャットフォーラムで会話をした後は明らかです。

  • 私たちはしなければならない

    • どちらもどのコマンドが実行されたかを探します。
    • コマンドの出力は何ですか
  • 特定のコマンドまたは出力が検出されると、特定のタスクを実行します。

答え1

まあ、多分そうかもしれません。いいえ出力を取得して処理して表示する良いアイデアすべて端末に入力するコマンドです。

ただし、一部の特定のコマンドについては、次のようにすることができます。tee

your-command | tee saved-output | processing-tool

処理ツールの結果を表示する場合saved-output(出力が短い場合)または(出力が長い場合)を使用して例を表示できます。catless

例:

$ 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以下の例のように直接使用してください。

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

関連情報