问题描述
我想在运行一个巨大的批处理文件时发送终端的 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