Entra

View Full Version : [Shell Linux] while read ...


guldo76
05-03-2004, 18:37
Ciao.
M'e` capitato di fare qualche scriptino che funzionasse tipo:
cat file | mioscript.sh
in modo che mioscript.sh leggesse da file con un
while read line; do ...

Mi chiedevo: come si puo` inserire il tutto nello script medesimo,
cosi` che non sia piu` costretto a usare
cat file | mioscript.sh
ma basti invocare mioscript.sh ?

Grazie,

Guldo

maxithron
06-03-2004, 11:20
se non ho capito male ti basta dare chmod 755 mioscript.sh

guldo76
06-03-2004, 13:35
Grazie, ma mi sa che mi sono spiegato male.
Riformulo:
In uno script, voglio leggere un file di testo riga per riga, per eseguire determinate operazioni su ogni riga, una riga alla volta, e accodare il risultato in un altro file.
Spero che ora sia piu` chiaro. :what:

Grazie,

Guldo

Pardo
06-03-2004, 15:45
exec < /a/b/c

il nome del file puo` anche stare in una variabile:

exec < $FILE

dopo questa istruzione la read legge sul file

La spiegazione sta nella gestione dei file descriptor.
Il '<' senza niente presuppone che ci sia a sinistra il descriptor che di default riferisce a stdin (che e` 0, 1 o 2 non ricordo). Quindi il file messo a destra viene collegato a tale descriptor (sostituendo l'stdin).

Se interessa anche conservare l'stdin, e` possibile attaccarlo in uno degli altri descriptor per poi recuperarlo piu` tardi.
Penso una exec con il descriptor pulito a sinistra e l'stdin a destra.

guldo76
06-03-2004, 16:51
Grazie mille!
Perdona la mia ignoranza... ma come si usa tutto cio` in uno script?
Non ci riesco mica...
Dovrei assegnare il risultato di quella cosa ad una variabile, per poi modificarla (sed) e ridirigerla in un altro file; ma non mi riesce...

Grazie!

Guldo

guldo76
07-03-2004, 16:10
:help:

Pardo
07-03-2004, 18:25
Te devi solo fare la exec una volta all'inizio e questo leva la necessita` del cat.
Il resto rimane uguale a come avevi gia` fatto!


exec < /tmp/myfile

read LINE
while [ -n "$LINE" ] ; do

....blabla.......
....bliblo.......

read LINE
done

guldo76
07-03-2004, 20:39
Originariamente inviato da Pardo
Il resto rimane uguale a come avevi gia` fatto!
... davo per scontato che l'avrei dovuto cambiare... :fagiano:

Grazie MILLE :ave:

Guldo