私はccliveでzenityプログレスバーを使用しようとしました。 Webビデオファイルをダウンロードするスクリプトを作成していますが、ダウンロードの進行状況を確認したいと思います。
しかし、私が何かをしようとすると
$cclive <url> 2>&1 | zenity --progress
しかし、コマンドラインを実行しても動作しないようです。どうすればそれができるのでしょうか?
BR、
[編集]
ccliveには次のような出力があります。
cclive http://www.youtube.com/watch?v=youtubevideo
Checking ... .......... ..........done.
youtubevideo.flv 2.5M 75.8K/s 00:09:29 5%
したがって、最後の部分をsdoutに送信する必要がありますが、方法がわかりません。それ以外の場合、脈動については、このオプションを使用して進行を確認することはできません。本当に必要です。ですから、このスクリプトでは脈動を使用しません。
コマンドの後の| zenity --progress
の貼り付けは機能しないと思います。
ダウンロードの最後にのみロードされることを知っています。
--percentage
パラメーターでzenityを使用しようとしましたが、プロセスの状態をチェックする最良の方法を知っています。
私のスクリプトでは、ファイルのサイズを知っています。
size_t=$theoretical_size_of file # I don't know where are from you take FULL size of your file. I know it in myself script.
size_r=`du -b /tmp/$filename`
perc=$[$size_t/$size_r*100]
どこでzenity --progress --percentage=$perc
と書くべきですか
そして、私はそれがループであるべきだと思う、du -b
が絶えず変化する原因となる...
cclive
の動作方法はわかりませんが、zenity
にプログレスバーを表示させるには、パーセンテージを標準出力に送信する必要があります。
以下に例を示します。
# This works:
(for i in $(seq 0 3 100); do echo "$i"; sleep 0.1; done) | zenity --progress
# This doesn't:
(for i in $(seq 0 3 100); do echo "hi"; sleep 0.1; done) | zenity --progress
cclive
を調整することができない限り、解決する必要があります
zenity --progress --pulsate
コメントに基づいて、ここに追加情報があります。 Maverickでcclive
が破損しているようですので、正確な答えはできません。とにかく、使用しようとするとエラーが発生するだけです。
最初に行う必要があるのは、cclive
を取得して、どこかにパーセンテージを出力することです。私は、ログファイルがそのようなパーセンテージを印刷すると仮定していますが、それをテストすることはできません。次に、その出力を解析し、zenity
に送信する必要があります。次に、サンプル(未テスト、またはコース)スクリプトを示します。
#!/bin/bash
url="$1"
tmp="/tmp/cclive.log"
mkfifo "$tmp"
cclive --background --logfile="$tmp" "$url"
egrep '[0-9]+%$' < "$tmp" | zenity --progress
rm "$tmp"
cclive
の出力の形式が異なる場合は、必要に応じてスクリプトを調整してください。 cclive
がログファイルにパーセンテージをダンプしない場合、cclive
コマンドを次のように変更してみてください。
cclive "$url" > "$tmp" &
最後に、stderrをstdout(2>&1
)。 Zenityはstdoutを消費しますが、おそらくすべてのエラーメッセージを食べたくないでしょう。
パイプラインのどこかにawk
をスローして、パーセンテージを分離する必要がある場合があります。基本的な構文は次のとおりです。
awk '{print $1}' # change $1 to the correct space-separated field
テストでは、正しく動作させることはできませんでしたが、cclive
を動作させることができないため、実際にトラブルシューティングすることはできません。