명령이 중지될 때까지 실시간으로 업데이트되는 진행률 표시줄을 출력하고 해당 진행률 표시줄의 백분율을 계속해서 가져와 이를 GUI(예: zenity)에 표시하고 싶다면 어떻게 해야 할까요?
명령 끝에서 이를 가져와 변수에 저장하는 방법을 알고 있습니다. 이것은 이 사이트에서 대부분의 질문에 나오는 질문이지만 명령이 실행되는 동안 이 작업을 수행하고 싶습니다.
많은 게임 런처나 앱스토어 등 이미 많은 앱들이 이 기능을 하고 있기 때문에 가능한 일이라고 생각합니다. 다시 한 번, 어떻게 같은 일을 계속할 수 있습니까?
답변1
명령의 출력을 실시간으로 다른 명령으로 보내는 것은 일반적으로 파이프를 사용하여 수행됩니다.
진행률 표시줄 형식이 wget
댓글에서 말한 것과 같은 경우:
[...]
92750K .......... .......... .......... .......... .......... 12% 3.81M 3m31s
92800K .......... .......... .......... .......... .......... 12% 4.36M 3m29s
92850K .......... .......... .......... .......... .......... 12% 4.05M 3m28s
92900K .......... .......... .......... .......... .......... 12% 4.04M 3m26s
92950K .......... .......... .......... .......... .......... 12% 3.86M 3m25s
93000K .......... .......... .......... .......... .......... 12% 3.98M 3m24s
93050K .......... .......... .......... .......... .......... 12% 3.86M 3m23s
93100K .......... .......... .......... .......... .......... 12% 3.31M 3m22s
[...]
출력이 tty로 전송되지 않으면 다음을 수행할 수 있습니다(GNU 가정 grep
).
wget ... 2>&1 |
grep --line-buffered -Po ' \K\d+(?=%)' |
zenity --progress
즉, 백분율 숫자를 추출하여 zenity
stdin으로 보냅니다.
노트:
2>&1
as는wget
stderr에 진행 표시줄을 인쇄합니다(매우 일반적임).--line-buffered
그렇지 않으면 해당 출력이 tty 장치로 전송되지 않으므로grep
해당 출력이 버퍼링됩니다 .