我想捕获标准输出(发送到终端),并在终端(对于用户)输出后执行一些处理。
我想知道如何获取输出、处理并进行相应的更改。
(如果可能的话)我希望我在终端上输入的每个命令都发生这种情况。
编辑:在临时聊天论坛中进行对话后,很明显
我们应该
- 两者都会查找发出了哪些命令
- 命令的输出是什么
如果检测到特定命令或输出,则执行某些操作。
答案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
根据以下链接 - 也许修改其中之一来完成本例中预期的操作,
- 两者都会查找发出了哪些命令
- 命令的输出是什么
如果检测到特定命令或输出,则执行某些操作。
直接使用即可,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