捕获命令的输出,对其进行处理,然后输出到终端

捕获命令的输出,对其进行处理,然后输出到终端

我想捕获标准输出(发送到终端),并在终端(对于用户)输出后执行一些处理。

我想知道如何获取输出、处理并进行相应的更改。

(如果可能的话)我希望我在终端上输入的每个命令都发生这种情况。


编辑:在临时聊天论坛中进行对话后,很明显

  • 我们应该

    • 两者都会查找发出了哪些命令
    • 命令的输出是什么
  • 如果检测到特定命令或输出,则执行某些操作。

答案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

相关内容