내 프로그램의 일부에는 dialog
파일에 대해 unsquashfs를 실행하여 파일을 디렉터리로 추출하는 작업이 포함됩니다. 옵션을 사용하여 진행률을 표시하기 위해 이 작업의 진행률 표시줄을 만들려고 합니다 --gauge
. 내가 시도한 것은 다음과 같습니다.
unsquashfs -f -q -d extract_directory filesystem.squashfs | dialog --title "Progress" --gauge "Unsquashing filesystem..." 7 60
-i
또한 unsquashfs 및 unsquashfs 와 같은 다른 옵션을 사용해 보았지만 -n
그 중 아무 것도 작동하지 않는 것 같습니다. 진행률 표시줄은 표시되지만 항상 0%에서 멈춰 있습니다. 그것을 작동시키는 것이 가능합니까? 필요한 경우 이상한 해결 방법을 사용해도 괜찮습니다.
답변1
그렇게 쉽지는 않습니다. dialog --gauge
표준 입력에서 한 줄에 숫자 하나씩 백분율을 기대합니다.
그러나 unsquashfs
그런 출력은 없습니다! 아마도 콘솔 제어 문자를 사용하여 진행률 표시줄을 업데이트할 것입니다(적어도 libncurses에 연결되어 있지는 않습니다).
중요한 부분은 progressbar.c
squashfs-tools 소스 코드의 145번째 줄입니다:
printf("\r[");
…
printf(" %3d%%", percentage);
제어 문자가 \r
현재 줄의 시작 부분으로 점프한 다음 진행률 표시줄이 해당 줄을 덮고 마지막으로 백분율이 인쇄됩니다.
그래서 당신은 것입니다아마도비슷한 게 필요해
unsquashfs linux.squash | tr $'\r' $'\n' | sed -ne 's/^.* \([[:digit:]]*\)\%$/\1/p' | dialog --gauge
하지만나는 그것이 효과가 있을지 의심스럽다. 대부분 버퍼링이 발생하고 모든 백분율이 즉시 표시됩니다(없이 시도 | dialog --gauge
).
솔직히 unsquashfs의 진행률 표시줄은 작동합니다. 동일한 대화 상자를 표시하는 대신 간단히 표시하시겠습니까?
그 외에도 squashfs의 압축을 풀 수 있는 몇 가지 사항이 있으며, 이를 사용하여 다른 것 대신 백분율을 출력하는 자신만의 프로그램을 구축할 수 있을 것 같습니다. mksquashfs
또는 소스 코드 에 명령줄 스위치를 추가 unsquashfs
하고 이를 수행하도록 할 수도 있습니다. 아마도 여기에서 가장 간단한 솔루션일 것입니다.