web-dev-qa-db-ja.com

Zenityでプログレスバーを機能させる方法は?

私は簡単な基本的なbashスクリプト(#! /bin/bashで始まり、ファイル形式は.sh)を書いており、プログレスバーを機能させようとしています:

#!/bin/bash  
echo "You are running in LXDE mode. Answer 'yes' or 'no' on the following question to continue (or not) in LXDE mode."
zenity --question --text='Do you want to continue in LXDE mode?' --ok-label=Yes --cancel-label=No
echo "Please enter your username and password to continue because the following command needs root privileges."
zenity --password --username
echo "Please enter today's date:"
zenity --calendar --text="Please enter today's date:"
echo "Please enter your name:"
zenity --entry --text='Please enter your name on the text entry below:'
echo "Analyzing data..."
zenity --info --text='Now begin analyzing data. If it takes more than 40 seconds, click on "Cancel".'
zenity --progress --title='Analyzing data...' --pulsate

0%から100%に移動しようとしましたが、何も起こりませんでした。 0%で止まっていた。また、--pulsateオプションを使用して脈動させようとしましたが、まだ0%で何もしていません。

誰でも助けてくれますか?助けていただければ幸いです。

3
Bajiru

Zenity docs には、探しているものを正確に実行する小さなコードスニペットがあります。

#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
  --title="Update System Logs" \
  --text="Scanning mail logs..." \
  --percentage=0

if [ "$?" = -1 ] ; then
        zenity --error \
          --text="Update canceled."
fi

まず、そこにあるコードをコピーして実行し、意図したとおりに機能することを確認してから、必要に応じて変更してコードを追加します。

進行状況バーがゼロのままになっている場合は、スクリプトのハングしている可能性のあるセクションをすべてバイパスし、実際に機能していると思わせるようにしてください!

編集:以下の回答で述べたように、動作しない理由は、コードサンプルのように、zenityが進行状況がエコーに反映されることを期待しているためです。

5
Bujiraso

zenityがプログレスバーを表示する方法は、echoスクリプトから|(パイプ)リダイレクトコマンド(シンボル)を使用してbashコマンドをキャプチャすることです。

buntu Forums から解除した例を試すことができます:

#!/bin/bash

# Force Zenity Status message box to always be on top.


(
# =================================================================
echo "# Running First Task." ; sleep 2
# Command for first task goes on this line.

# =================================================================
echo "25"
echo "# Running Second Task." ; sleep 2
# Command for second task goes on this line.

# =================================================================
echo "50"
echo "# Running Third Task." ; sleep 2
# Command for third task goes on this line.

# =================================================================
echo "75"
echo "# Running Fourth Task." ; sleep 2
# Command for fourth task goes on this line.


# =================================================================
echo "99"
echo "# Running Fifth Task." ; sleep 2
# Command for fifth task goes on this line.

# =================================================================
echo "# All finished." ; sleep 2
echo "100"


) |
zenity --progress \
  --title="Progress Status" \
  --text="First Task." \
  --percentage=0 \
  --auto-close \
  --auto-kill

(( $? != 0 )) && zenity --error --text="Error in zenity command."

exit 0

Ubuntu Forumsへのリンクをたどると、このスクリプトの説明を読むことができます。それでも質問がある場合は、下のコメントで質問してください。回答できるように最善を尽くします。

2