
次のシェルスクリプトがありますパッケージ名が与えられ、きちんと存在するようにスクリプトの出力を降順に整理します。-
┌─[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
次の例を使用して、素晴らしい進行状況バーを使用するように調整します。シェルスクリプトにプログレスバーを追加するには?。