it-swarm.com.de

Wie erstelle ich eine GUI für Bash-Skripte?

Ich möchte einige grafische Dialoge für mein Skript erstellen, weiß aber nicht wie. Ich höre etwas über GTK-Server oder ähnliches. Wenn jemand weiß, wie man Bash mit tcl/tk verbindet, bin ich auch zufrieden.

Bitte posten Sie nicht "change to C++", da mein Projekt ein Skript in Bash sein muss. Es gibt keine anderen Optionen.

Irgendwelche Ideen?

BEARBEITEN: Danke für die Antworten, aber ich möchte nicht "Grafiken" wie in Farben in der Konsole, sondern Grafikfenster, die ich verschieben, minimieren usw. Ich werde xmessage testen, aber Ich glaube nicht, dass das das ist, wonach ich suche.

EDIT 2: Ich möchte keinen einfachen Dialog wie yes/no erstellen, sondern eine Oberfläche wie Fortschrittsbalken und Buttons, so etwas wie ein Spiel.

63
lauriys

Bevor Sie GUI-Dialoge verwenden, sollten Sie Konsolenansagen verwenden. Sehr oft kommt man mit einfachen "j/n?" Eingabeaufforderungen, die Sie in bash über den Befehl read .. erreichen.

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

Wenn die Eingabeaufforderung der Konsole es einfach nicht schafft, ist Zenity wirklich benutzerfreundlich , zum Beispiel:

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

Dies funktioniert nur unter Linux/Gnome (oder wird nur auf solchen Systemen standardmäßig installiert). Die read -Methode funktioniert auf nahezu jeder Plattform (einschließlich Headless-Maschinen oder über SSH).

Wenn Sie etwas komplexeres benötigen als das, was read oder Zenity bereitstellt, ist "change to C++" die beste Methode (obwohl ich Python/Ruby gegenüber C++ für solche Shell-Skript-Ersetzungsaufgaben empfehlen würde).

Ich möchte eine einfache Benutzeroberfläche für ein seltsames Spiel erstellen, die Fortschrittsanzeige für die Gesundheit oder so ist das Beispiel für das, was ich möchte. Die Variable "GESUNDHEIT" ist 34, also fülle den Fortschrittsbalken mit 34/100 aus

Als Befehlszeilenskript würde es Python verwenden:

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

Oder um die Werte zwischen 1 und 78 zu normalisieren (damit bei einer Standardterminalgröße kein Zeilenumbruch auftritt):

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

Zenity hat auch ein 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

Wie ich bereits sagte, wenn Zenity nicht das tun kann, was Sie brauchen, sollten Sie Ihr Spiel als "richtiges" Skript in Python/Ruby/Perl/C++/etc schreiben, da es sich so anhört, als würden Sie die Grenzen einer Shell sprengen -script kann tun ..

61
dbr

Wenn Sie eine grafische Benutzeroberfläche in Bash schreiben möchten, ist Zenity der richtige Weg. Das können Sie damit machen:

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

Durch die Kombination dieser Widgets können Sie ziemlich benutzerfreundliche GUIs erstellen. Natürlich ist es nicht so flexibel wie ein in eine Programmiersprache integriertes Toolkit, aber in einigen Fällen ist es wirklich nützlich.

20
nxadm

es gibt einen Befehl namens dialog, der die Bibliothek ncurses verwendet. " Dialog ist ein Programm, mit dem Sie eine Vielzahl von Fragen stellen oder Meldungen mithilfe von Dialogfeldern aus einem Shell-Skript anzeigen können. Diese Arten von Dialogfeldern sind implementiert (obwohl nicht alle notwendigerweise kompiliert sind) dialog) "

siehe http://pwet.fr/man/linux/commandes/dialog

13
Pierre

Wenn Sie Tcl/Tk in Ihrer Umgebung verwenden können, sollten Sie wahrscheinlich ein TCL-Skript schreiben und dieses verwenden. Sie könnten auch Wunsch anschauen.

13
Charlie Martin

Sie können dialog verwenden, das heißt ncurses basiert oder whiptail , das heißt slang basiert.

Ich denke, beide haben GTK- oder Tcl/Tk-Bindungen.

11
Renato Aquino

Bitte sehen Sie sich meine Bibliothek an: http://sites.google.com/site/easybashgui

Es ist beabsichtigt, mit dem gleichen Befehlssatz alle vier großen Werkzeuge "kdialog", "Xdialog", "cdialog" und "zenity" gleichgültig zu behandeln, abhängig davon, ob X ausgeführt wird oder nicht, wenn D.E. ist KDE oder Gnome oder andere. Es gibt 15 verschiedene Funktionen (darunter zwei mit der Bezeichnung "Fortschritt" und "Anpassen") ...

Tschüss :-)

6
vaisarger

Sie können gtk-server dafür. Gtk-Server ist ein Programm, das im Hintergrund ausgeführt wird und eine textbasierte Oberfläche bietet, über die andere Programme (einschließlich Bash-Skripte) es steuern können. Es enthält Beispiele für Bash ( http://www.gtk-server.org/demo-ipc.bash.txt , http://www.gtk-server.org/demo) -fifo.bash.txt )

6
dmitry_vk

Wenn Sie Qt/KDE installiert haben, können Sie kdialog verwenden, um ein Qt-Dialogfenster aufzurufen. Sie können ganz einfach festlegen, dass ein Ja/Nein-Dialogfeld, OK/Abbrechen, einfache Texteingabe, Kennworteingabe usw. angezeigt wird. Sie haben dann Zugriff auf die Rückgabewerte aus diesen Dialogfeldern in der Shell.

3
Brian Carper

Anscheinend hat jemand ein Bash-Interface für GTK + geschrieben. Ich bin mir nicht sicher, ob Sie es problemlos zum Laufen bringen können, aber es könnte einen Versuch wert sein. Sie finden es hier:

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

2
Tamas Czinege