다음 쉘 스크립트가 있습니다패키지 이름이 주어지고 깔끔하게 존재하도록 스크립트의 출력을 내림차순으로 정리합니다.-
┌─[shirish@debian] - [~] - [6348]
└─[$] cat find-interesting-patches.sh
for source in $(dpkg-query --show -f \
'${source:Package}\n' | sort -u); do bts \
select source:${source} tag:patch \
| sed "s/^/${source} /g"; done
stdout에서 출력을 얻습니다.
┌─[shirish@debian] - [~] - [6349]
└─[$]./find-interesting-patches.sh
2048-qt 781691
abootimg 725728
accountsservice 805989
acl 677570
acpi 772688
acpi-support 823072
acr 772194
이제 패키지 수가 제한되어 있다는 것을 알고 있습니다. 예를 들어 4k 이상입니다.
$dpkg -l > dpkg-l.txt
그런 다음
$wc dpkg-l.txt
전체 she-bang의 줄 번호와 단어 수를 제공합니다.
스크립트를 실행할 때 진행률 표시줄을 표시하여 완료 정도를 알 수 있는 방법이 있습니까? 내가 찾고 있어요https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script#238094몇 가지 방법을 시도했지만 성공하지 못했습니다. 예를 들어, pv를 시도했지만 끔찍하게 실패했습니다.
┌─[shirish@debian] - [~] - [6353]
└─[$] pv ./find-interesting-patches.sh
for source in $(dpkg-query --show -f \
'${source:Package}\n' | sort -u); do bts \
select source:${source} tag:patch \
| sed "s/^/${source} /g"; done
153 B 0:00:00 [9.09KiB/s] [=================================================================================================>] 100%
내가 기대했던 것과는 다릅니다. 내가 뭘 잘못하고 있는지 아는 사람 있나요?
답변1
당신이 줄 때pv
cat
명령줄 인수인 파일은 파일 처럼 작동 하고 표시하며 해당 출력의 진행 상황을 추적합니다. 이 양식은 pv
파이프를 사용하여 느린 프로세스에 파일을 공급하려는 경우 유용합니다. 맨페이지에 예제가 있습니다.
출력 저장을 고려할 수도 있습니다.
dpkg-query --show -f '${source:Package}\n' | sort -u
파일에 추가하고 이를 사용하면 pv
루프 호출에 피드되지만 bts select
결과 파일이 너무 짧아서 버퍼링되고 pv
실제로 처리가 시작되기 전에 처리된 것으로 생각합니다.
따라서 진행 상황을 수동으로 추적해야 합니다.
#!/bin/sh
file=$(mktemp)
dpkg-query --show -f '${source:Package}\n' | sort -u > ${file}
lines=$(wc -l ${file} | cut -f1 -d\ )
line=0
while read source; do
line=$((line + 1))
printf "Processing line %d / %d\r" ${line} ${lines} >&2
bts select source:${source} tag:patch | sed "s/^/${source} /g"
done < ${file} | sort -k2,2n -r
rm ${file}
echo "Done " >&2
다음 예제를 사용하여 멋진 진행률 표시줄을 사용하도록 조정하겠습니다.쉘 스크립트에 진행 표시줄을 추가하는 방법은 무엇입니까?.