zenity in ciclo while true ? [messaggio #39566] |
gio, 16 giugno 2011 16:24 |
Tigers Messaggi: 45 Registrato: agosto 2008 |
Member |
|
|
Ho una serie di script bash, vorrei lanciarli tramite un menu zenity.
Cioè creo uno script "padre" che propone un menu zenity con una lista di
n script da eseguire
while true; do
sel=$(zenity ...)
case $sel in
foo1)
x-terminal-emulator -e "bash -c \"script.sh; read -p 'Press ENTER to
close terminal...' key\""
foo2)
....
Il workaround di eseguire bash e non direttamente lo script serve perchè
altrimenti il terminale si chiude nonostante il read key (almeno questo
è quello che ho googlato)
Il problema è questo:
Io voglio questo:
finestra "principale" con il menu degli script
scelgo uno script
si apre il terminale che lo esegue
termina, premo un tasto e chiudo il terminale
riappare il menu zenity (solo DOPO che l'utente ha chiuso il terminale)
invece adesso avviene questo:
si apre zenity
scelgo lo script
si apre il terminale che lo esegue
subito si riapre il menu degli script (senza che lo script di prima
abbia finito)
forse sarebbe più semplice aggiungere il "press any key" nei singoli
script, ma non avrebbe senso quando poi tali script saranno eseguiti
manualmente da un terminale aperto precedentemente e che resterà aperto...
Non è una questione di vita o di morte certo, ma vorrei più che altro
capire il motivo per curiosità: ho fatto tutta una serie di prove ma non
ho capito la "causa reale" :-)
|
|
|
Re: zenity in ciclo while true ? [messaggio #39572 è una risposta a message #39566] |
gio, 16 giugno 2011 20:38 |
Crononauta Messaggi: 145 Registrato: novembre 2010 |
Senior Member |
|
|
On Thu, 16 Jun 2011 16:24:36 +0200
Paolo <xxx@yyy.com> wrote:
> Il problema è questo:
> Io voglio questo:
> finestra "principale" con il menu degli script
> scelgo uno script
> si apre il terminale che lo esegue
> termina, premo un tasto e chiudo il terminale
> riappare il menu zenity (solo DOPO che l'utente ha chiuso il terminale)
Non capisco il problema:
#!/bin/bash
XX=0;
while [ "$XX" != "2" ]; do
XX=$(zenity --list --text="scegli" \
--column x --column y --radiolist \
--print-column=2 TRUE "1" FALSE "2")
if [ "$XX" != "2" ]; aterm; fi
done
e lanciando lo script ottengo una schermata di zenity che continua ad
aprirmi degli aterm finché scelgo "1". Quando chiudo l'aterm, ricompare
zenity (e non prima), che mi richiede di nuovo cosa voglio fare.
Quando scelgo 2, invece, esce.
Se invece di aterm associ uno script, non vedo cosa debba cambiare, a
maggior ragione se lo esegui dentro aterm (tipo aterm -e script.sh), o chi
per esso se preferisci altri terminali.
> si apre zenity
> scelgo lo script
> si apre il terminale che lo esegue
> subito si riapre il menu degli script (senza che lo script di prima
> abbia finito)
Perché non devi fare xterminal -e "bash...", forki due volte. x-terminal
come fai tu esce non appena invoca bash, e rientra nel ciclo iniziale,
mentre lo script viene eseguito nella nuova bash.
Devi fare eseguire lo script dentro lo stesso terminale che apri,
x-terminal -e script.sh etc.
--
Massimo Bacilieri AKA Crononauta
Skype: crononauta <massimo.bacilieri@gmail.com>
Facebook: Massimo Bacilieri
|
|
|
|
Re: zenity in ciclo while true ? [messaggio #39580 è una risposta a message #39572] |
gio, 16 giugno 2011 21:39 |
Tigers Messaggi: 45 Registrato: agosto 2008 |
Member |
|
|
On 16/06/11 20:38, Crononauta wrote:
> Perché non devi fare xterminal -e "bash...", forki due volte. x-terminal
> come fai tu esce non appena invoca bash, e rientra nel ciclo iniziale,
> mentre lo script viene eseguito nella nuova bash.
>
> Devi fare eseguire lo script dentro lo stesso terminale che apri,
> x-terminal -e script.sh etc.
>
Eh, quel workaround mi serve per mantenere aperto il terminale.
Gli script di cui sopra sono pensati per uso in un terminale già aperto,
quindi non includono niente del tipo "Press any key to exit".
Se faccio direttamente -e script.sh , a fine script si chiude senza che
l'utente possa vedere l'output...
Ho trovato la soluzione in
http://stackoverflow.com/questions/3512055/avoid-gnome-termi nal-close-after-script-execution.
Poi pensavo di aver risolto aggiungendo
x-terminal ... &
wait $!
Ma non funziona comunque (si riapre subito zenity)
Ho provato a mettere echo $! e il problema è che $! rimane vuota...
Insomma, il problema è in quella riga, ed è quello che dici tu.
A questo punto: come fare per semplificare il tutto ma mantenere la
caratteristica che il terminale deve restare aperto quando lo script
"figlio" finisce, e zenity deve riapparire solo quando l'utente chiude
manualmente il terminale?
Grazie mille dell'aiuto :-)
ciao
|
|
|
|
|
Re: zenity in ciclo while true ? [messaggio #39586 è una risposta a message #39584] |
gio, 16 giugno 2011 23:39 |
Crononauta Messaggi: 145 Registrato: novembre 2010 |
Senior Member |
|
|
On Thu, 16 Jun 2011 23:20:29 +0200
Paolo <xxx@yyy.com> wrote:
> On 16/06/11 22:53, Crononauta wrote:
>
> > aterm -e test.sh read
>
> Se eseguo questo, ad esempio gnome-terminal -x ls read,
> vedo il terminale per una frazione di secondo :-(
>
> Però ho un dubbio atroce:
> provando il mio script in un xterm e non in gnome-terminal, sembrerebbe
> funzionare.
> Aggiungi che invocare x-terminal-emulator non è detto sia uguale che
> invocare xterm o gnome-terminal...
>
> Non vorrei che il tutto fosse molto più semplice del previsto :-)
>
> Grazie davvero dell'aiuto
Secondo la manpage di gnome-terminal:
http://pwet.fr/man/linux/commandes/gnome_terminal
ho come idea che invece di "-e" tu debba usare "-x" per eseguire degli
script dentro al terminale, altrimenti vi esegue soltanto il *comando*.
Il che tradotto vuol dire che finché esegui solo lo script come fosse un
comando, la cosa in pratica coincide, ma se vuoi eseguire uno script con un
output e dei parametri, il -e non ottiene lo stesso risultato di -x.
E -x fa allora quello che fa -e in aterm... prova semplicemente così.
--
Massimo Bacilieri AKA Crononauta
Skype: crononauta <massimo.bacilieri@gmail.com>
Facebook: Massimo Bacilieri
|
|
|
Re: zenity in ciclo while true ? [messaggio #39593 è una risposta a message #39586] |
ven, 17 giugno 2011 09:15 |
Tigers Messaggi: 45 Registrato: agosto 2008 |
Member |
|
|
On 16/06/11 23:39, Crononauta wrote:
> E -x fa allora quello che fa -e in aterm... prova semplicemente così.
>
Ho già provato, in un caso esce un "error executing command line",
nell'altro si richiude subito
Comunque con xterm al posto di gnome-terminal funziona
xterm -e "mioscript $file; read -p 'Press ENTER to close terminal...' key"
Direi che la cosa è risolta, grazie mille :-)
|
|
|