명령이 실행되는 동안 명령의 출력을 어떻게 읽을 수 있나요?

명령이 실행되는 동안 명령의 출력을 어떻게 읽을 수 있나요?

명령이 중지될 때까지 실시간으로 업데이트되는 진행률 표시줄을 출력하고 해당 진행률 표시줄의 백분율을 계속해서 가져와 이를 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

즉, 백분율 숫자를 추출하여 zenitystdin으로 보냅니다.

노트:

  • 2>&1as는 wgetstderr에 진행 표시줄을 인쇄합니다(매우 일반적임).
  • --line-buffered그렇지 않으면 해당 출력이 tty 장치로 전송되지 않으므로 grep해당 출력이 버퍼링됩니다 .

관련 정보