출력이 기록되는 동안 파이프 출력의 값을 변수로 반복적으로 추출하는 방법

출력이 기록되는 동안 파이프 출력의 값을 변수로 반복적으로 추출하는 방법

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"; } 이제 마침내 원래와 다른 출력(아마도 첫 번째 다운로드 %)을 얻었습니다. 누구든지 나에게 작업 코드를 줄 수 있습니까?

관련 정보