在 bash 中,我在屏幕上运行一个命令,其效果如下:
while true
do
echo $RANDOM
sleep 1
done
其输出为:
12396
19683
31641
...
我想将其放入类似 grep/awk 的东西中并匹配特定的模式,例如12345
,我想要运行一个命令。
我不想捕获正在运行的命令的完整输出 - 它可能会运行很长时间才找到匹配项,而且我不想浪费机器空间。
这可以在 bash 中轻松完成吗?
在理想情况下,我还希望将输出继续打印到终端,这样我就可以远程控制并自己监控输出,但这不是绝对必要的。
答案1
./feeding_script.sh |
tee >(while read a; do [ "$a" == "12345" ] && </dev/null another_command; done)
笔记:
tee
分割数据流;一份副本发送到“文件”(在本例中为命令)>(…)
,另一份继续发送到终端;</dev/null another_command
– 此重定向可防止another_command
使用 生成的数据feeding_script.sh
。