如何在输出仍在写入时重复从管道输出中提取值到变量

如何在输出仍在写入时重复从管道输出中提取值到变量

我想每 5 秒更新一次文件的下载状态到我的电报机器人。我在这里也使用 bash。

aria2c $url --summary-interval=5 2>&1 | tee output.log | grep -oP "(\d+(\.\d+)?(?=%))"

这东西让我每 5 秒后得到下载百分比。我想使用这个下载百分比让我的机器人定期更新。我尝试过这些

aria2c $url --summary-interval=5 2>&1 | tee output.log | grep -oP "(\d+(\.\d+)?(?=%))" | { read text; curl -s "https://api.legram.org/bot${tg_token}/editMessageText" --data "message_id=${msg_id}&text=DOWNLOADED-${text}&chat_id=${ch_id}&parse_mode=HTML&disable_web_page_preview=True"; }

尝试2

aria2c $url --summary-interval=5 2>&1 | tee output.log | text=$(grep -oP "(\d+(\.\d+)?(?=%))") | curl -s "https://api.legram.org/bot${tg_token}/editMessageText" --data "message_id=${msg_id}&text=DOWNLOADED-${text}%&chat_id=${ch_id}&parse_mode=HTML&disable_web_page_preview=True"; }

但没有一个有效。然后为了测试我尝试了这个

aria2c $url --summary-interval=5 2>&1 | tee output.log | grep -oP "(\d+(\.\d+)?(?=%))" | { read text; echo "$text"; } 现在,我终于得到了一个输出(这可能是第一个下载%),与它应该的不同。谁能给我工作代码。

相关内容