如何将标准输入实时发送到 redis 通道?

问题描述

我想在运行一个巨大的批处理文件时发送终端的 stdout 和 stderr。批处理文件 echoer.sh

echo $HOME
sleep 3
echo $HOME
sleep 3
echo $HOME
# n times

在终端执行

./echoer.sh | redis-cli -x publish echoer

这会等待 echoer.sh 的整个执行完成,然后发送发布命令。有没有办法在收到输出后立即发布?

电流输出

# command
redis-cli subscribe echoer
# output below
1) "message"
2) "echoer"
3)"/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n/home/prashant\n

解决方法

当然,一次一行读取脚本的输出,然后将该行发布到 Redis:

./echoer.sh | while read line ; do echo "$line" | redis-cli -x publish echoer ; done 
,

使用 xargs ,它使用 xargs 实用程序将每一行发送到 echoer 通道。

 ./echoer.sh| xargs -n 1 redis-cli  publish echoer