Wie zeige ich ein GUI-Meldungsfeld aus einem Bash-Skript unter Linux an?
Frage
Ich schreibe ein paar kleine Bash-Skripte unter Ubuntu Linux.Ich möchte sie über die GUI ausführen können, ohne ein Terminalfenster zu benötigen, um Eingaben einzugeben oder Ausgaben anzuzeigen.
Bisher ist lediglich ein Passwort für sudo erforderlich – und gksudo erledigt das problemlos.Aber ich habe noch keine einfache Möglichkeit gefunden, ein Nachrichtenfeld anzuzeigen.Gibt es eine Art „gkmessage“-Befehl?Ich würde etwas bevorzugen, das in einer Standard-Ubuntu-Installation vorhanden ist, aber es macht mir nichts aus, bei Bedarf ein neues Paket zu installieren.
Lösung
Ich glaube Zenität werde tun, was du willst.Es wurde speziell für die Anzeige von GTK-Dialogen über die Befehlszeile entwickelt und ist als verfügbar Ubuntu-Paket.
Andere Tipps
Wenn Sie verwenden Ubuntu viele Distributionen die notify-send
Der Befehl wirft eine dieser netten verderblichen Benachrichtigungen in die obere rechte Ecke.Etwa so:
notify-send "My name is bash and I rock da house"
Schön!
Jeder erwähnt Zenity, es scheint noch viele andere zu geben.Eine gemischte, aber interessante Liste finden Sie unter http://alternativeto.net/software/zenity/
Zunächst ein Beispiel für Zenity mit Textformatierungsmarkierung, Fenstertitel und Schaltflächenbeschriftung.
zenity \
--info \
--text="<span size=\"xx-large\">Time is $(date +%Hh%M).</span>\n\nGet your <b>coffee</b>." \
--title="Coffee time" \
--ok-label="Sip"
gxmessage
gxmessage "my text"
xmessage
xmessage
ist sehr alt, daher stabil und wahrscheinlich in allen Distributionen verfügbar, die X verwenden (da es mit X verteilt wird).Es ist über X-Ressourcen anpassbar, für diejenigen, die Linux oder Unix schon lange genug verwenden, um zu wissen, was es bedeutet (.Xdefaults
, irgendjemand ?).
xmessage -buttons Ok:0,"Not sure":1,Cancel:2 -default Ok -nearmouse "Is xmessage enough for the job ?" -timeout 10
kdialog
(nicht getestet)
In einem PPA
YAD:Zenity On Steroids [Grafische Dialoge aus Shell-Skripten anzeigen] ~ Web Upd8:Ubuntu-/Linux-Blog.Scheint die Größe von Dialogen nicht automatisch anzupassen.
echo My text | yad \
--text-info \
--width=400 \
--height=200
Ein größeres Beispiel
yad \
--title="Desktop entry editor" \
--text="Simple desktop entry editor" \
--form \
--field="Type:CB" \
--field="Name" \
--field="Generic name" \
--field="Comment" \
--field="Command:FL" \
--field="Icon" \
--field="In terminal:CHK" \
--field="Startup notify:CHK" "Application" "Name" "Generic name" "This is the comment" "/usr/bin/yad" "yad" FALSE TRUE \
--button="WebUpd8:2" \
--button="gtk-ok:0" \
--button="gtk-cancel:1"
Andere nicht in Ubuntu-Standard-Repositories
- Shellgui
- xdialog
- gtkdialog
Off-Topic (für Terminal)
whiptail --msgbox "my text" 10 20
dialog --msgbox "my text" 10 20
Fühlen Sie sich frei, es zu bearbeiten.
Der Zenität Die Anwendung scheint das zu sein, wonach Sie suchen.
Um Input zu erhalten Zenität, können Sie eine Variable angeben und die Ausgabe erhalten zenity --Eintrag darin gespeichert.Es sieht ungefähr so aus:
my_variable=$(zenity --entry)
Wenn Sie sich den Wert in ansehen meine_variable Jetzt ist es das, was Sie im Popup-Eingabedialog von Zenity eingegeben haben.
Wenn Sie eine Eingabeaufforderung dazu geben möchten, was der Benutzer (oder Sie) in das Dialogfeld eingeben soll, fügen Sie Folgendes hinzu --Text Wechseln Sie mit der gewünschten Beschriftung.Es sieht ungefähr so aus:
my_variable=$(zenity --entry --text="What's my variable:")
Zenity bietet viele andere nette Optionen für bestimmte Aufgaben, die Sie vielleicht auch ausprobieren möchten Zenity – Hilfe.Ein Beispiel ist das --Kalender Option, mit der Sie ein Datum aus einem grafischen Kalender auswählen können.
my_date=$(zenity --calendar)
Das ergibt ein schön formatiertes Datum basierend auf dem, worauf der Benutzer geklickt hat:
echo ${my_date}
gibt:
08/05/2009
Es gibt auch Optionen für Schieberegler, Fehler, Listen usw.
Hoffe das hilft.
ich fand die xmessage Befehl, was irgendwie gut genug ist.
Hier ist ein kleines Tcl-Skript, das genau das tut, was Sie wollen.Der Wish-Interpreter sollte unter Ubuntu standardmäßig installiert sein.
#!/usr/bin/wish
pack [label .msg -text [lindex $argv 0]]
pack [entry .ent]
bind .ent <KeyPress-Return> { puts [.ent get]; destroy . }
focus .ent
Nennen Sie es so:
myanswer=`gui-prompt "type your answer and press enter"`
alert
Und notify-send
scheint das Gleiche zu sein.ich benutze notify-send
für Nicht-Eingabenachrichten, da dadurch der Fokus nicht gestohlen wird und ich keine Möglichkeit finde, Zenity usw. zu stoppen.davon ab, dies zu tun.
z.B.
# This will display message and then disappear after a delay:
notify-send "job complete"
# This will display message and stay on-screen until clicked:
notify-send -u critical "job complete"
Es gibt auch dialog
und die KDE-Version kdialog
. dialog
wird von Slackware verwendet und ist daher möglicherweise nicht sofort auf anderen Distributionen verfügbar.
Wie wäre es mit Ubuntu? Alarm.Es kann nach jedem Vorgang verwendet werden, um darauf aufmerksam zu machen, dass der Vorgang abgeschlossen ist, und zeigt sogar ein rotes Kreuzsymbol an, wenn der Vorgang mit Fehlern abgeschlossen wurde
ls -la; alert
wenn nichts anderes vorhanden ist.Sie können ein xterm starten und es wie folgt echoen:
xterm -e bash -c 'echo "this is the message";echo;echo -n "press enter to continue "; stty sane -echo;answer=$( while ! head -c 1;do true ;done);'
Kdialog und Dialog sind beide gut, aber ich würde Zenity empfehlen.Schnell, einfach und die xmessage oder der Dialog sieht viel besser aus.