Live Support My forum, my way! Il forum dei newsgroup: Linux » zenity in ciclo while true ?
My forum, my way! Il forum dei newsgroup
Fast Uncompromising Discussions.Newsgroup FUDforum will get your users talking.

Loading
Utenti      F.A.Q.    Registrati    Login    Home
Home » Computer » Linux » zenity in ciclo while true ?
zenity in ciclo while true ? [messaggio #39566] gio, 16 giugno 2011 16:24 Messaggio successivo
Tigers  è attualmente disconnesso 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 Messaggio precedenteMessaggio successivo
Crononauta  è attualmente disconnesso 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 #39574 è una risposta a message #39566] gio, 16 giugno 2011 21:03 Messaggio precedenteMessaggio successivo
Copyleft  è attualmente disconnesso Copyleft
Messaggi: 357
Registrato: novembre 2010
Senior Member
>
> while true; do
> sel=$(zenity ...)
>
> case $sel in
> foo1)
> x-terminal-emulator -e "bash -c \"script.sh; read -p 'Press ENTER to
^^^^
x-terminal-emulator -f "bash -Dc \"script.sh; read -p 'Press ENTER to
while true;

---
> close terminal...' key\""
> foo2)
> ...
>
> Il workaround di eseguire bash e non direttamente lo script serve perchè

No, l'errore te l'ho segnalato sopra.

Ciao


--
last-kernel-inside
Re: zenity in ciclo while true ? [messaggio #39580 è una risposta a message #39572] gio, 16 giugno 2011 21:39 Messaggio precedenteMessaggio successivo
Tigers  è attualmente disconnesso 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 #39583 è una risposta a message #39580] gio, 16 giugno 2011 22:53 Messaggio precedenteMessaggio successivo
Crononauta  è attualmente disconnesso Crononauta
Messaggi: 145
Registrato: novembre 2010
Senior Member
On Thu, 16 Jun 2011 21:39:26 +0200
Paolo <xxx@yyy.com> wrote:

> Eh, quel workaround mi serve per mantenere aperto il terminale.

E non basta un "read" in fondo agli script?
Oppure, in fondo alla riga che richiami. Per esempio, se questo è lo script
che vuoi eseguire (sia esso test.sh):

#!/bin/bash
ls -l
cat "pippero" > ~/.logfile
echo "fatto"


e questo (test2.sh) il tuo script con zenity:

#!/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" == "1" ]; then
aterm -e test.sh read
fi
done

Dovrebbe essere risolutivo.

--
Massimo Bacilieri AKA Crononauta
Skype: crononauta <massimo.bacilieri@gmail.com>
Facebook: Massimo Bacilieri
Re: zenity in ciclo while true ? [messaggio #39584 è una risposta a message #39583] gio, 16 giugno 2011 23:20 Messaggio precedenteMessaggio successivo
Tigers  è attualmente disconnesso Tigers
Messaggi: 45
Registrato: agosto 2008
Member
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
Re: zenity in ciclo while true ? [messaggio #39586 è una risposta a message #39584] gio, 16 giugno 2011 23:39 Messaggio precedenteMessaggio successivo
Crononauta  è attualmente disconnesso 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 Messaggio precedente
Tigers  è attualmente disconnesso 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 :-)
Argomento precedente:Ingegneria informatica?
Argomento successivo:Debian
Vai al forum:
  


Ora corrente: ven mag 03 15:37:38 CEST 2024

Tempo totale richiesto per generare la pagina: 0.02025 secondi
.:: Contatti :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Live Support