web-dev-qa-db-ja.com

bashスクリプト用のGUIを作成する方法は?

スクリプト用のグラフィカルダイアログをいくつか作成したいのですが、方法がわかりません。 GTK-Serverまたはそのようなものについて何かを聞きます。誰かがBashをtcl/tkにリンクする方法を知っていれば、私も満足します。

私のプロジェクトはBashのスクリプトでなければならないため、「C++への変更」のようなものを投稿しないでください。他のオプションはありません。

何か案は?

編集:回答ありがとうございますが、コンソールの色のような「グラフィック」は必要ありませんが、移動、最小化などが可能なグラフィカルウィンドウはテストしますが、xmessageはテストしますが、私はそれが私が探しているものだとは思わない。

編集2: yes/noのような単純なダイアログは作りたくないのですが、プログレスバーやボタン、ゲームのようなインターフェイスが必要です。

63
lauriys

GUIダイアログを実際に使用する前に、コンソールプロンプトの使用を検討してください。多くの場合、単純な「y/n?」で逃げることができます。 bashでは readコマンド 。を介してプロンプトが表示されます。

read -p "Do something? ";
if [ $REPLY == "y" ]; then
    echo yay;
fi

コンソールプロンプトがそれをカットしない場合、 Zenity は本当に 使いやすい です、例えば:

      zenity --error --text="Testing..."
      zenity --question --text="Continue?"

これはLinux/Gnomeでのみ動作します(または、そのようなシステムではデフォルトでのみインストールされます)。 readメソッドは、ほとんどすべてのプラットフォーム(ヘッドレスマシンを含む、またはSSH経由)で動作します

ReadやZenityが提供するものよりも複雑なものが必要な場合は、「C++への変更」が本当に最良の方法です(ただし、このようなシェルスクリプトの置き換えタスクには、C++よりPython/Rubyをお勧めします)

奇妙なゲームのシンプルなインターフェースをしたい、健康状態のプログレスバーなどが私が望むものの例です。変数「HEALTH」は34なので、プログレスバーを34/100で埋めてください

コマンドラインスクリプトとして、Pythonを使用します。

$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************

または、1から78の間の値を正規化するには(標準の端末サイズで行の折り返しが行われないように):

$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0)) / 100.0) * 78)"

Zenityには Progress Dialog もあり、

#!/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が必要なことを実行できない場合は、ゲームのことをPython/Ruby/Perl/C++/etcで「適切な」スクリプトとして記述することを検討してください。 -scriptができます。

61
dbr

BashでグラフィカルUIを作成する場合は、 zenity が最適です。これはあなたがそれでできることです:

Application Options:
  --calendar                                     Display calendar dialog
  --entry                                        Display text entry dialog
  --error                                        Display error dialog
  --info                                         Display info dialog
  --file-selection                               Display file selection dialog
  --list                                         Display list dialog
  --notification                                 Display notification
  --progress                                     Display progress indication dialog
  --question                                     Display question dialog
  --warning                                      Display warning dialog
  --scale                                        Display scale dialog
  --text-info                                    Display text information dialog

これらのウィジェットを組み合わせて、かなり使いやすいGUIを作成できます。もちろん、プログラミング言語に統合されたツールキットほど柔軟ではありませんが、場合によっては本当に便利です。

20
nxadm

ncursesライブラリを使用するdialogというコマンドがあります。 「Dialogは、シェルスクリプトのダイアログボックスを使用して、さまざまな質問を表示したり、メッセージを表示したりできるプログラムです。これらのタイプのダイアログボックスは実装されますダイアログ)

http://pwet.fr/man/linux/commandes/dialog を参照してください

13
Pierre

ご使用の環境でTcl/Tkを使用できる場合は、おそらくTCLスクリプトを作成して使用する必要があります。 wish もご覧ください。

13
Charlie Martin

ダイアログ つまり ncurses ベースまたは whiptail つまり スラング ベースを使用できます。

両方ともGTKまたはTcl/Tkバインディングがあると思います。

11
Renato Aquino

ライブラリをご覧ください: http://sites.google.com/site/easybashgui

同じコマンドセットで、Xが実行されているかどうか、D.E KDEまたはGnomeまたはその他です。 15の異なる機能があります(そのうち、「進行」と「調整」と呼ばれる2つがあります)...

さようなら:-)

6
vaisarger

これには gtk-server を使用できます。 Gtk-serverは、バックグラウンドで実行されるプログラムであり、他のプログラム(bashスクリプトを含む)がそれを制御できるようにするテキストベースのインターフェースを提供します。 Bashの例があります( http://www.gtk-server.org/demo-ipc.bash.txthttp://www.gtk-server.org/demo -fifo.bash.txt

6
dmitry_vk

Qt/KDEがインストールされている場合は、 kdialog を使用して、Qtダイアログウィンドウをポップアップ表示できます。はい/いいえダイアログ、OK /キャンセル、単純なテキスト入力、パスワード入力などを表示するように簡単に指定できます。その後、シェルでこれらのダイアログからの戻り値にアクセスできます。

3
Brian Carper

どうやら誰かがGTK +のbashインターフェースを書いたようです。簡単に機能するかどうかはわかりませんが、試してみる価値はあります。ここで見つけることができます:

http://home.eol.ca/~parkw/index.html#gtk

2
Tamas Czinege