如何将stdin实时发送到redis通道?

How to send stdin to redis channel in realtime?

我想发送终端的 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