Newsgroup: it.comp.os.linux.sys
Titolo: [semi-OT] variabili in script TCL

Dentro uno script expect dovrei impostare il risultato di un comando
come valore da assegnare ad una variabile.
Per capirci l'equivalenete di bash --> `bla bla` oppure $(bla bla)
Sto cercando disperatamente e senza alcun successo dentro i manuali di
TCL.
-- 
Massimiliano

 come valore da assegnare ad una variabile.
non sono sicuro di aver capito --- l'istruzione "spawn program
arguments" di expect non fa al caso tuo?  dovrebbe ritornare lo stdout
a expect stesso...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Dept. of Physics, Univ. of Padova, Italy              ROT13: 
ybe...@cq.vasa.vg

 a expect stesso...
mi spiego. facccio un ssh con expect a a un certo punto ho questo:
expect -re "(.*)\? "
send -- "export DISPLAY=129.157.74.17:0.0\n"
poiche' l'indirizzo che ho e' dinamico, vorrei sostituire l'indirizzo
ip che vedi con il risultato del comando `ifconfig bla bla bla`.
-- 
Massimiliano

 Per capirci l'equivalenete di bash --> `bla bla` oppure $(bla bla)
Se ho ben capito, in TCL ti basta
set i [ comando ]
dove 
[ comando ] restituisce il valore di comando
set i x salva il valore x nella variabile $i
Ad esempio,
set i [ expr 1+1 ]
2
echo $i
2
Ciao
gianluca


mhh ... secondo me ci siamo quasi, tuttavia ho ancora un errore mentre
eseguo lo script:
invalid command name "/sbin/ifconfig"
grazie per il momento.
-- 
Massimiliano

 invalid command name "/sbin/ifconfig"
non vorrei dire cose ovvie... per eseguire comandi di shell dalla shell tcl
il comando e' "exec nomecomando".
Quindi un comando tcl che fa quello che cerchi dovrebbe essere
set ip [ exec /sbin/ifconfig eth0 | grep "inet ad" | awk "{print \$2}" |
sed "s/addr://" ]
Il mio problema piu' grosso e' recuperare l'IP dal comando ifconfig. Credo
che ci sia un modo migliore di quello che ti ho scritto... e mi piacerebbe
scoprirlo!
ciao
gianluca

 il comando e' "exec nomecomando".
No no. Sono cose ovvie per qualcuno che conosce TCL, ma non per me :)
Grazie mille!!
p.s.: pertanto 'expr' sarebbe builtin in TCL e non /usr/bin/expr ....
-- 
Massimiliano

 sed "s/addr://" ]
Per fortuna che erano cose ovvie :P
non funziona.... funziona solo se eseguo un comando senza pipe.
Pertanto, una soluzione che ho trovato io e' stata quella di mettere il
comando in uno script ed invocare quello script.
quindi fai loscript 'mio_ip' con sed, awk, cut, quello che ti pare
e dopo dichiari la variabile che ho trovato io e:
set ip [ exec /usr/local/bin/mio_ip ]
Adesso ho 2 domande per te?
1) secondo te e' possibile "quotare" in qualche modo il comando con il
pipe?
Ti dico che ho provato apici singoli, apici doppi, apici inversi,
parentesi quadre, tonde e graffe. A me non funziona in nessun caso.
2) qual'e' il "separatore" per le variabili??
MI SPIEGO:
metti che io ho la variabile $massi e quindi se se io voglio unirla ad
una stringa scrivero': ${massi}miliano
come faccio in TCL ?
-- 
ciao
Massimiliano

 come faccio in TCL ?
esattamente come hai scritto:
% set massi pino
pino
% puts $massi
pino
% puts ${massi}miliano
pinomiliano
%
Questo e' tutto il TCL che so. Per le altre domande, ti rimando al tutorial
ufficiale 
http://www.tcl.tk/man/tcl8.5/tutorial/tcltutorial.html
che secondo me e' fatto molto bene.
Ciao
G

 che secondo me e' fatto molto bene.
ti ringrazio per tutte le dritte!!
-- 
Massimiliano

 Per capirci l'equivalenete di bash --> `bla bla` oppure $(bla bla)
Usi le parentesi quadre.
set variabile [comando parametri ...]
-- 
  (\_/)   |   \    \  | ___|_   |_   |   /\/\  ianezz a casa sua... :-)
  (^.^)   |  _ \  | \ | _|     /    /   {^.^ } Verba volant, scripta
/(")(") _|_/  _\_|  _|____|____|____| (")(")\ manent, data corrupted

 sed "s/addr://" ]
regexp {inet addr:\s*([[:digit:].]+)} [exec /sbin/ifconfig eth0] => ip


 scoprirlo!
Use the regexp, Luke! :-)
regexp {inet addr:\s*([[:digit:].]+)} [exec /sbin/ifconfig eth0] => ip
puts $ip
(già, in Tcl "=>" è un nome di variabile legittimo...).
