Prima di utilizzare effettivamente i dialoghi della GUI, prendere in considerazione l'utilizzo di prompt della console. Molto spesso riesci a farla franca con il semplice "y/n?" prompt, che in bash a raggiungere attraverso il read
command ..
read -p "Do something? ";
if [ $REPLY == "y" ]; then
echo yay;
fi
Se prompt della console è solo non è tagliato, Zenity è davvero easy to use, ad esempio:
zenity --error --text="Testing..."
zenity --question --text="Continue?"
Questo funziona solo su Linux/Gnome (o meglio, verrà installato solo di default su tali sistemi).Il metodo read
funzionerà praticamente su qualsiasi piattaforma (incluse le macchine headless o via SSH)
Se hai bisogno di qualcosa di più complesso di quello letto o Zenity, "cambiare in C++" è davvero il metodo migliore (anche se io " d raccomandare Python/rubino su C++ per tali compiti script di shell-sostituzione)
voglio fare semplice interfaccia per qualche strano gioco, la barra di avanzamento per la salute o qualcosa è l'esempio per quello che voglio. Variabile "salute" è 34, in modo da rendere barra di avanzamento compilato 34/100
come uno script da riga di comando, che sarebbe utilizzare Python:
$ export HEALTH=34
$ python -c "import os; print '*' * int(os.environ.get('HEALTH', 0))"
**********************************
O per normalizzare i valori compresi tra 1 e 78 (quindi non si ottiene ritorno a capo su un formato terminale standard):
$ python -c "import os; print '*' * int((int(os.environ.get('HEALTH', 0))/100.0) * 78)"
Zenity ha anche un 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
Come ho detto prima, se Zenity non può fare quello che ti serve, cerca di scrivere il tuo gioco come uno script "corretto" in Python/Ruby/Perl/C++/etc perché sembra che tu stia spingendo i limiti di cosa può fare uno script di shell.
se lo desiderate 'zenity'. – jmc
In passato c'era "dtksh" un'implementazione di ksh-93 con accesso alle librerie Motif. È possibile impostare i callback delle funzioni di shell e creare un'applicazione grafica completa con script di shell. Caratterizzato dialogo, pulsante, casella di testo, pulsante di opzione, ... – Emmanuel
Dai un'occhiata a ['tkbash'.] (Https://github.com/phil294/tkbash) – Blauhirn