Pagina 1 di 1
messaggio cha abilita e lancia lo script (BASH) [RISOLTO]
Inviato: martedì 2 ottobre 2007, 12:45
da leytonn
Ciao a tutti.
Ho 1 problema.
Al lancio di uno script che mi apre una finestra grafica vorrei far visualizzare un messaggio:
Attenzione! vuoi veramente eseguire lo script?
e, nel caso risponda NO lo script non deve essere eseguito. Per ora ho fatto questo :
echo "ATTENZIONE!!! ....... Continuare? s/n "
echo "rispondi s/n=";read risposta
if [ $risposta = "n" ]; then
exit
fi
#
Però non mi piace perchè rispondendo qualsiasi cosa che non sia 'n' lo script viene comunque eseguito.Come posso migliorarlo?
Qualcuno sa aiutarmi?
Re: messaggio cha abilita e lancia lo script e sostituz stringa con variabile (B
Inviato: martedì 2 ottobre 2007, 16:11
da synack
leytonn ha scritto:
1) Al lancio di uno script che mi apre una finestra grafica vorrei far visualizzare un messaggio:
Attenzione! vuoi veramente eseguire lo script?
e, nel caso risponda NO lo script non deve essere eseguito.
Codice: Seleziona tutto
if dialog --yesno "Vuoi eseguire lo script" 0 0; then echo "HAI SCRITTO SI"; else echo "HAI SCRITTO NO"; exit 1; fi
leytonn ha scritto:
2) In un file di testo alla fine della seconda riga ho:
Source date: Thu Aug 9 16:05:05 2007
il mio obiettivo è quello di elaborare questa riga ( può essere diversa di volta in volta) e sostituirla nello stesso file. In questo caso vorrei:
data: 9 Aug 2007 Thu 16:05:05
Codice: Seleziona tutto
# echo "Source date: Thu Aug 9 16:05:05 2007" | sed -r "s/Source date: (\\w+) (\\w+) ([0-9]+) ([0-9]+):([0-9]+):([0-9]+)\\s([0-9]{4})/[1:\\1 2:\\2 3:\\3 4:\\4 5:\\5 6:\\6 7:\\7]/g"
[1:Thu 2:Aug 3:9 4:16 5:05 6:05 7:2007]
Sopra puoi vedere le corrispondenze...
Nel tuo caso usa:
Codice: Seleziona tutto
cat filename | sed -r "s/Source date: (\\w+) (\\w+) ([0-9]+) ([0-9]+):([0-9]+):([0-9]+)\\s([0-9]{4})/Data Corretta: \\3 \\2 \\7 \\4:\\5:\\6/g"
Dovrebbe funzionare, ma nn l'ho testato...
Re: messaggio cha abilita e lancia lo script (BASH) NON VA!!!
Inviato: martedì 2 ottobre 2007, 16:55
da leytonn
Il primo punto credevo funzionasse ma dopo aver scelto l'opzione SI provo ad eseguire lo script ma mi da errori strani e non va avanti
[?1049h[1;24r[m(B[4l[?7h[?1h=[?1000h[39;49m[?1h=[39;49m[37m[40m[H[2J[16d[0;1m(B[36m[44m[J[H[K
[K
[K
[K
[K
[K
[K
[K
Per il secondo non va e non so perchè (però devo dire che forse il tuo esempio mi farà veramente capire un pò come funziona il SED)
Comunque ho risolto sostituendo al posto di Source data una variabile:
sed -r "s/Source date: .*\$/${trasf_data}/"
Grazie mille
Re: messaggio cha abilita e lancia lo script (BASH) NON VA!!!
Inviato: martedì 2 ottobre 2007, 22:14
da synack
leytonn ha scritto:
Il primo punto credevo funzionasse ma dopo aver scelto l'opzione SI provo ad eseguire lo script ma mi da errori strani e non va avanti
[?1049h[1;24r[m(B[4l[?7h[?1h=[?1000h[39;49m[?1h=[39;49m[37m[40m[H[2J[16d[0;1m(B[36m[44m[J[H[K
Dipende dallo script, non da questa linea di comando, che come vedi non fa davvero nulla di che...
Per il secondo non va e non so perchè (però devo dire che forse il tuo esempio mi farà veramente capire un pò come funziona il SED)
Comunque ho risolto sostituendo al posto di Source data una variabile:
sed -r "s/Source date: .*\$/${trasf_data}/"
Ehm, ma tu non vuoi sostituire la data con una nuova, vuoi anche eliminare tutto ciò che segue la data....
Il comando corretto dovrebbe essere:
Codice: Seleziona tutto
cat filename | sed -r "s/Source date: (\\w+) (\\w+) ([0-9]+) ([0-9]+):([0-9]+):([0-9]+)\\s([0-9]{4})[u][b].*[/b][/u]/Data Corretta: \\3 \\2 \\7 \\4:\\5:\\6/g"
Grazie mille
Di nulla

Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 10:32
da leytonn
Ciao.
Per quanto riguarda il SED, nn va. BOH!
Comunque adottando la soluzione detta prima :
sed -r "s/Source date: .*\$/${trasf_data}/"
a partire da 'Source date' in quella riga mi viene sostitutito il contenuto di $trasf_data. E' così vero?
Per il lancio dello script invece se non inserisco
if dialog --yesno "Vuoi eseguire lo script" 0 0; then echo "HAI SCRITTO SI"; else echo "HAI SCRITTO NO"; exit 1; fi
lo script funziona.
Grazie
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 11:49
da synack
leytonn ha scritto:
Ciao.
Per quanto riguarda il SED, nn va. BOH!
Comunque adottando la soluzione detta prima :
sed -r "s/Source date: .*\$/${trasf_data}/"
a partire da 'Source date' in quella riga mi viene sostitutito il contenuto di $trasf_data. E' così vero?
Si, è così...
Non so perché non va, dovrei vedere il file che passi a sed, o nn ho capito qualcosa...
Per il lancio dello script invece se non inserisco
if dialog --yesno "Vuoi eseguire lo script" 0 0; then echo "HAI SCRITTO SI"; else echo "HAI SCRITTO NO"; exit 1; fi
lo script funziona.
Nn so aiutarti senza vedere lo script! Prova ad aggiungere un reset dopo la linea di comando che ti ho dato, forse il terminale non viene resettato propriamente dopo dialog...
Puoi anche provare a sostituire dialog con xdialog (apt-get install xdialog)... se ti va prova questa alternativa:
Codice: Seleziona tutto
Xdialog --wrap --title "YES/NO BOX" --help "aiuto" --yesno "Vuoi proseguire o no?" 0 0
case $? in
0)
echo "SI";;
1)
echo "NO";;
255)
echo "Box closed.";;
esac
Eventualmente puoi anche modificare il tuo codice originario facendo un controllo su si anziché su no, cosicché lo script non venga eseguito
se scrivi qualsiasi cosa che non sia 's'.
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 12:50
da leytonn
Grazie.
Funziona........quasi bene e forse si capirà cosa non va.
- Con xdialog gli do il primo si e si apre la finestra grafica del mio script. BENE
- quando faccio RUN però mi richiede per altre 2 volte SI o NO. In ogni caso dò 2 volte SI e lo script va a termine.
Ma perchè mi richiede SI o NO; perchè ritorna indietro?
BOH :-\
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 12:59
da synack
Se posti lo script vediamo di risolvere questo prob, nn mi viene nessuna possibilità plausibile in mente...
Ho provato a scrivere io uno script che faccia uso di Xdialog e funziona... quindi bho ???
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 13:15
da leytonn
Il problema è che lo script è utilizzabile con GRASS (software GIS) ed è lunghissimo.
La cosa strana è che senza la richiesta (con xdialog o altro) di eseguire o meno lo stesso script FUNZIONA. Ti metto cmq almeno la parte iniziale anche se credo che lo script in sè non abbia problemi:
#!/bin/bash
Xdialog --wrap --title "YES/NO BOX" --help "aiuto" --yesno "Vuoi proseguire o no?" 0 0 #funziona quasi bene.
case $? in
0)
echo "SI";;
1)
echo "NO";;
255)
echo "Box closed.";;
esac
#
if [ -z "$GISBASE" ] ; then
echo "You must be in GRASS GIS to run this program." >&2
exit 1
fi
if [ "$1" != "@ARGS_PARSED@" ] ; then
exec g.parser "$0" "$@"
fi
#-------------inizio tcl-tk-------------
#%Module
#% description: script di un file vettoriale
#%End
#-------------Mappe Vettoriali-------------
#%option
#% key: vettoriale
#% type: string
#% gisprompt: old,vector,vector
#% answer:
#% description: (input vector map; prima setta le info con v.support)
#% required : yes
#%end
ecc.... ecc....
Non credo possa essere un problema di incompatibilità
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 13:37
da synack
leytonn ha scritto:
Il problema è che lo script è utilizzabile con GRASS (software GIS) ed è lunghissimo.
La cosa strana è che senza la richiesta (con xdialog o altro) di eseguire o meno lo stesso script FUNZIONA. Ti metto cmq almeno la parte iniziale anche se credo che lo script in sè non abbia problemi:
#!/bin/bash
Xdialog --wrap --title "YES/NO BOX" --help "aiuto" --yesno "Vuoi proseguire o no?" 0 0 #funziona quasi bene.
case $? in
0)
echo "SI";;
1)
echo "NO";;
255)
echo "Box closed.";;
esac
#
if [ -z "$GISBASE" ] ; then
echo "You must be in GRASS GIS to run this program." >&2
exit 1
fi
if [ "$1" != "@ARGS_PARSED@" ] ; then
exec g.parser "$0" "$@"
fi
#-------------inizio tcl-tk-------------
#%Module
#% description: script di un file vettoriale
#%End
#-------------Mappe Vettoriali-------------
#%option
#% key: vettoriale
#% type: string
#% gisprompt: old,vector,vector
#% answer:
#% description: (input vector map; prima setta le info con v.support)
#% required : yes
#%end
ecc.... ecc....
Non credo possa essere un problema di incompatibilità
Non so cosa faccia g.parsed di preciso, ma prende in input il nome dello script e i parametri, e probabilmente richiama lo script:
predo che non faccia altro che fare delle elaborazioni e richiamare lo script con gli stessi parametri aggiungendo, come primo parametro, @ARGS_PARSED@... quindi lo script riconosce che è stato chiamato ricorsivamente e non riesegue g.parsed
Sostituisci la prima riga di Xdialog con
Codice: Seleziona tutto
if [ "$1" != "@ARGS_PARSED@" ] ; then
Xdialog --wrap --title "YES/NO BOX" --help "aiuto" --yesno "Vuoi proseguire o no?" 0 0 #funziona quasi bene.
case $? in
0)
echo "SI";;
1)
echo "NO"
exit 1
;;
255)
echo "Box closed."
exit 1
;;
esac
fi
Fammi sapere se ho intuito giusto!
p.s. credo che funzioni anche con dialog a questo punto
edit: errori di ortografia
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 13:59
da leytonn
Devo capire bene cosa mi hai detto prima.
Cmq sicuramente qualcosa hai inutuito e c'è un miglioramento:
rispondo SI, si apre la finestra grafica, rispondo dinuovo SI e poi va tutto lisco.
Prima invece all'apertura della finestra dovevo rispondere 2 volte SI.
Io non sono in grado di capire perchè.!!!!!!!!!
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 14:08
da synack
lo script viene chiamato ricorsivamente... non c'è ombra di dubbio...
cerca le occorrenze di $0... Devi capire che controlli vengono fatti per evitare che parti di codice inutili
vengano eseguite + volte... Di sicuro un controllo era su @ARGS_PARSED@, gli altri dovresti cercarli tu nel tuo script...
Altrimenti, se vuoi risolvere la cosa + semplicemente , prova a fare uno script del genere, che richiami il tuo script...
Codice: Seleziona tutto
#!/bin/sh
Xdialog --wrap --title "YES/NO BOX" --help "aiuto" --yesno "Vuoi proseguire o no?" 0 0 #funziona quasi bene.
case $? in
0)
echo "SI";;
1)
echo "NO"
exit 1
;;
255)
echo "Box closed."
exit 1
;;
esac
script_originario $@
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 14:22
da leytonn
cerca le occorrenze di $0 ....?????
non riesco,causa mia ovviam, a seguirti proprio bene. In ogni caso penso però che la variabile $GISBASE possa creare qualche problema; almeno penso.
if [ "$1" != "@ARGS_PARSED@" ] ; then
Xdialog --wrap --title "YES/NO BOX" --help "aiuto" --yesno "Vuoi proseguire o no?" 0 0 #funziona quasi bene.
case $? in
0)
echo "SI";;
1)
echo "NO"
exit 1
;;
255)
echo "Box closed."
exit 1
;;
esac
fi
#
if [ -z "$GISBASE" ] ; then
echo "You must be in GRASS GIS to run this program." >&2
exit 1
fi
#
if [ "$1" != "@ARGS_PARSED@" ] ; then
exec g.parser "$0" "$@"
fi
Ho provato ad aggiungere all'IF anche $GISBASE?
if [ "$1" != "@ARGS_PARSED@" ] && [ -z "$GISBASE" ]then ma ovv non va
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 14:34
da synack
Il problema è nel resto dello script, o in g.parsed...
$0 è il nome dello script, $@ sono gli argomenti passati.
$GISBASE nn so che sia, senza avere il resto dello script non posso aiutarti... oltretutto se fosse paurosamente lungo non avrei neanche il tempo di farlo, sorry! Prova con la soluzione suggerita nel post precedente, dovrebbe andare
Re: messaggio cha abilita e lancia lo script (BASH)
Inviato: mercoledì 3 ottobre 2007, 14:40
da leytonn
$GISBASE è una variabile di GRASS (identifica il database di GRASS).
Comunque sia, va bene. Anzi benissimo.
Ti ringrazio veramente tanto per tutto l'aiuto e complimenti per la competenza.
Grazie ancora. (good)