Newsgroup: it.comp.os.linux.iniziare
Titolo: Bashta !

Problema: Ho un file che contiene, tra l'altro ,
righe di comando per wget.
Visto che queste iniziano per http,ftp o -[arg] , scrivo per selezionarle :
CMD=`grep ^[hf-] "$FILENAME"`
Ma allorche' scrivo wget $CMD , anche se grep ha trovato piu'
di una linea , viene tutto messo in fila dopo wget.
Se uso "for link in $CMD " peggio che andar di notte ! 
Una riga per ogni parola singola .
Sta bash proprio non la digerisco. 
-- 
Il direttore all'impiegato:
- Non so come faremmo senza di voi, Rossi...  ma lo scopriremo lunedi'
  prossimo.

 Una riga per ogni parola singola .
scusami, ma non capisco bene quello che vuoi dire qui. 
Perche' non mostri il contenuto di CMD?

 Sta bash proprio non la digerisco. 
in realta` non sai programmare e non conosci gli strumenti che usi.
- man wget
  [ ... ]
	-i file
	--input-file=file
	           Read URLs from file, in which case no URLs need to be on the com-
  [ ... ]
- man bash
  [ ... ]
	for name [ in word ] ; do list ; done
		The list of words following in is expanded, generating a list of
		items.  The variable name is set to each element of this list in
		turn, and list is executed each time.  If the in word  is  omit-
  [ ... ]
esercizio 1:
	usare solo wget
esercizio 2:
	usare un ciclo for.

 
Non capisco quale sia il tuo problema. Se vuoi scaricare da tutti i
link contenuti nel file é ovvio che wget li legge come una lista.
Se intendi specifici criteri allora devi raffinare la ricerca di grep.
Per esempio, scaricare da http o ftp puoi passare questo:
^(f|ht)tp://
Spero che sia migliore del tuo risultato, maggior info man regex.
Oppure se usi KDE 3.2 esiste il buon editor di espressioni regolari,
che per versioni precedenti si trova a lovorare solo con klipper.

 Sta bash proprio non la digerisco.
Nel dubbio, fai un test facile:
$ cat test.txt 
uno
due
tre
uno uno
due due
tre tre
uno uno uno
due due due
tre tre tre
$ grep ^u test.txt 
uno
uno uno
uno uno uno
$ a="`grep ^u test.txt`"
$ echo $a
uno uno uno uno uno uno
$ IFS=""
$ a=`grep ^u test.txt`
$ echo $a
uno
uno uno
uno uno uno
Spiegazione lasciata per esercizio ;-)
Ciao,
-- 
       Roberto Divia`             Love at first sight is one of the greatest
       =============             labour-saving devices the world has ever seen.
Mailbox: C02110                 CERN-European Organization for Nuclear Research
E-mail: 
Robert...@cern.ch
           CH-1211 GENEVE 23, Switzerland

 
io farei qualcosa del tipo
export CMD=`grep ^[hf-] "$FILENAME"`
for link in $CMD ; do wget $i ; done
ciao, andrea

for link in $CMD ; do wget $i ; done
Oppure usando xargs.
Ciao.
-- 
Antonio   @=D

 Ciao.

 wget ... -i /tmp/grep.out
Bravo Macaluso, ti sei redento !
Pero' non va ancora bene : spesso ci sono anche gli argomenti 
per wget in quelle linee.
-- 
Lui: "Quando vedo rosso divento un gran toro!".
Lei: "Anch'io quando vedo rosso divento un gran vacca!".
		-- Da it.hobby.umorismo

i fondamentali (wget -i ...)
Wget -i??? Naaa., trooooppo facile leggere il manuale!
Tanto più divertente scriversi qualcosa in perl che faccia il necessario!
:-P
[Caspita, va bene che wget è peggio di ls come opzioni, ma questa la uso
spesso!!! :-/ ]
Ciao.
-- 
Antonio   @=D

 for link in $CMD ; do wget $i ; done
                              ^
Vorrai dire $link , semmai?

 per wget in quelle linee.
ok, ho partorito questo :
#!/bin/bash
  TMP=/tmp/grep.out
 
 #seleziona le linee che iniziano per http:// | ftp:// | -
 # il grep messo all'interno del ciclo rallenta troppo lo script !
 egrep "^-|^[fh]ttp://" link_file > $TMP
 line_count=`wc $TMP | awk '{ print $1 }'`
 if [ $line_count -ne 0 ] ;then
   for line in `seq $line_count`
   do
         read lnk
         echo "$line-> $lnk"
         wget $lnk
         echo
   done < $TMP
 fi
-- 
"Passavo la sera seduto davanti allo specchio per tenermi compagnia."
		-- Cesare Pavese (1908-1950), scrittore

  fi
Se e` tutto qui` quello che vuoi fare,
grep ... > <file>
wget -i <file>
e non si perde tempo.
Giusto per farti contento:
function wget () {
egrep "^-|^[fh]ttp://" $1 | awk '{ printf("echo %d: %s; /usr/bin/wget <opzioni> %s\n", $NR, $1, $1); }' | sh 
}
se studi bene, elimini pure egrep e fai tutto con awk
buon divertimento.

 
Vedo che si un pacifista mancato ;-)
ciao
mmm

 dove sono le opzioni? io non le vedo
dove vorresti vederle ? sono nel file , come avevo
peraltro detto nel post originale.
Leggi troppo in fretta.
Ah ! io non ho mai detto di essere un programmatore.
ciao. 
-- 
Ci sono alcune cose che gli uomini devono fare per rimanere uomini.
		-- Kirk, "The Ultimate Computer", data astrale 4929.4

 done < $TMP
Forse si poteva evitare questo ciclo, wget -i $TMP fa la stessa
operazione. Ma non voglio infierire su gusti altrui.

 ciao. 
prima si gattona, poi si corre

 operazione.
no , e per due ragioni
a)-i non vuole opzioni 
b)in $TMP ci possono essere + righe 
-- 
Se la museruola si mette sul muso, dove si mette la cazzuola?
		-- Riccardo Cassini

   grep "^wget " | sh
ci sono milioni di modi per fare una cosa , io scelgo nell'ordine:
1) Il piu' veloce (per me/cpu)
2) Il piu' semplice e breve, sebbene esteticamente brutto.
egrep "^-|^[fh]ttp://" link | awk '{ print "wget " $0 }'| sh
Toh' ,me la sono cavato con una riga.
Grazie,ciao.
-- 
Non sono un atleta.  Ho pessimi riflessi.  Una volta sono stato
investito da un'auto spinta da due tizi.
		-- Woody Allen

 a)-i non vuole opzioni
volevo dire solo la a), ma m'e' uscita pure la b) !


 b)in $TMP ci possono essere + righe
Io ho fatto una opzione con klipper che mi rintraccia URL appena
copiata e me la appende in un file. Dopo lo passo a wget e mi scarica
i files elencati _su_ _piú_ _righe_ . Sará che il mio wget sia
diverso?