Newsgroup: it.comp.os.linux.iniziare
Titolo: Dubbi su script shell

                                  ]
[ Subject: Dubbi su script shell                                           ]
[ Newsgroups: it.comp.os.linux.sys                                         ]
[ Message-ID: <dfmpua...@sibilla.AP.lan>                               ]
Mi sto scrivendo uno script bash che mi permette di inviare SMS dal
cellulare, in pratica un frontend per scmxx, e mi sono trovato a
fronteggiare delle cose che non capisco. 
Di seguito elenco i miei dubbi:
1. [APOSTROFI E VIRGOLETTE]
   La riga di comando prodotta deve essere del tipo 
   # scmxx -sS -t $testo -n $numero
   Ora, per poter usare le virgolette all'interno del testo io eseguo la
   linea di comando mettendo il testo stesso tra virgolette, come da man
   bash. Solo che il comando viene eseguito con gli apici!
   Mi spiego meglio.
   Il comando nello script è :
        scmxx -sS -t "$testo" -n $numero 
   Debuggando con "set -x", invece, vedo che la shel esegue il comando:
        + scmxx -sS -t 'Qui Sta Il Testo' -n 340XXXXXX
   Se il testo è di una sola parola invece la shell omette le
   virgolette:
        + scmxx -sS -t Testo -n 340XXXXXX
   Tra parentesi, se metto degli apostrofi nel testo vengono gestiti
   benissimo, venendo protetti automaticamente.
   Ora la domanda è: Il funzionamento è perfetto, più di quel che
   speravo, ma perché la riga di comando viene eseguita così?
 
2. [EFFETTI GRAFICI]    
   Non capisco perché echo si comporta diversamente in console e in
   Konsole. Il comando:
   echo -e "\033[31;40;4mFunzione non completamente implementata.\033[0m"
   in console viene visualizzato in bianco acceso (bold) mentre in
   konsole, gnome terminal, xterm, viene visualizzato in rosso
   sottolineato.
   Perché?
3. [USO DELLA READLINE IN read]
   Uso la libreria readline con il comando
   read -e testo
   Ora vorrei poter rieditare la variabile testo in un secondo momento,
   senza passare per file temporanei. La soluzione migliore sarebbe
   quella di riusare una read e trovarmi la variabile $testo già nella
   riga di comando, oppure di poterla richiamare, come per la history,
   tramite i comandi propri della readline.
   Solo che non ho trovato da nessuna parte se è possibile e come fare.
   La soluzione "grezza&feroce" che sto usando è quella di usare il
   contenuto della variabile da rieditare come prompt e lavoarare di
   copiaincolla con gpm, ma non mi sembra molto elegante.
Mille grazie in anticipo.
E auguri di Buon Anno.
Ciao.
-- 
Antonio
| Pretendi una risposta immediata dal NG?
| Puoi ottenerla!
| 
http://groups.google.com/advanced_group_search

    Konsole.
Uhm... forse a seconda di come e` impostato il terminale per l'emulazione
cambiano i codici di escape?
-- 
Ikitt (che di readline sa solo che funziona bene, e tanto per ora gli basta)

 [...]
Poiche' sembra che tu stia cercando di realizzare una specie di interfaccia
a caratteri in Bash, forse fai meno fatica ad usare "dialog" per creare
le maschere (man dialog).
Io farei una interfaccia WEB: con l'HTML e' facile creare delle maschere,
e lato server puoi benissimo usare Bash (v. esempi nel mio sito, sezione
Apache). Avresti cosi' una interfaccia usabile sia localmente, sia da rete.
Comunque, rimanendo alla sola "read -e", passano periodicamente vari
articoli su comp.unix.shell al riguardo con vari esempi di read "interattive".
Cerca soprattutto i post di un certo Margolin.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

Ma te come si aspettavi che si comportasse?
Rispondo direttamente sotto a Salsi. OK?
-- 
Antonio
.

Cerca soprattutto i post di un certo Margolin.
Informazione utilissima. Non sapevo che esistesse anche comp.unix.shell!
Comunque non ho trovato risposta (ma ho cercato solo nel NG da te
consigliato.
La cosa che più si avvicina è il consiglio di usare il comando
$ source mioscript, ma non è proprio quel che volevo.
In pratica così facendo la readline mi si apre nella shell corrente
(scusa se esprimo con approssimazione), e riesco a richiamare la
history, compreso il comando di lancio dello script. Se inizio a
scrivere il testo con la read , e poi per qualche motivo tocco le frecce
posso tornare al testo come con la history.
Quel che vorrei io invece è rieditare la mia variabile testo richiamando
la read in un secondo momento, come se, ad esempio, avessi già inserito
il testo, ma prima dell'invio volessi modificarlo.
Non so se è chiaro. 
Posso anche spedire il mio script, non l'ho reso ancora pubblico perché
volevo affinare qualcosa (e postarlo non l'ho fatto perché è lunghetto).
Ciao, e mille grazie a entrambi per aver provato a confrontarvi col mio
problema.
-- 
Antonio
.

 servono e mi protegge da sola gli accenti.
Bash non mette mai automaticamente niente nelle stringhe.
Quindi, se il contenuto di $testo lo hai ottenuto via read, ricorda solo
che negli script tale var. dovra' SEMPRE apparire tra virgolette "...".
Infine riguardo al tuo desiderio di usare la libreria readline conservando
le precedenti linee inserite tra invocazioni successive del programma
(insomma, tu hai capito) so che Bash ha dei comandi per manipolare il
file history (storico, in italiano), ma non le ho mai usate.
Secondo me faresti meglio a lasciare che il tuo programma sia richiamabile
da linea di comando e basta, cosi sarebbe sfruttabile anche per creare
automatismi scriptabili di livello superiore.


automatismi scriptabili di livello superiore.
Beh, io ho buttato giù questo script proprio per automatizzare scmxx.
Comunque ho separato per bene le funzioni, così dovrebbe essere per lo
meno facilmente adattabile a esigenze diverse.
Sto iniziando a vedere come lavorare bypassando scmxx, andando a
scrivere direttamente sulla seriale, ma il lavoro è più complicato di un
semplice scriptino (per me) e adesso non posso proprio imbarcarmici.
Mille grazie per la pazienza (finora) e per le risposte che
eventualmente mi darai.
Ciao.
-- 
Antonio