[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RiminiLUG-General] bash redirezione I/O PIPE e filtri



[i lettori mi scuseranno in anticipo se intervengo solo per fare il
rompiscatole! :)]

On Fri, Apr 29, 2011 at 04:11:01PM +0200, Giovanni Pasini wrote:
> Ad un certo punto c'è l'esempio alla redirezione di un comando
> interpretato da echo e inviato a bash questo:
> 
> for i in *.c.txt; do echo mv $i $(basename $i .c.txt).c; done | bash
> 
> cito dal link [1]:
> 
> > Questo è un modo abbastanza generale (e sicuro) di procedere. Se
> > dovete dare una sequenza di comandi simili costruite un ciclo for che
> > faccia l’echo di un comando costruito a partire dalla variabile del
> > ciclo. Solo quando sarete sicuri di non aver sbagliato, fate il pipe
> > in una shell.

attenzione che la shell e' un oggetto alquanto insidioso e ci vuole non poca
attenzione a creare script robusti (la advanced bash shell scripting guide che
ti ha linkato Ivan contiene molti spunti).

Un esercizio interessante da fare per chi ci si vuole cimentare e' provare il
comando sopra per rinominare un file che contiene degli spazi (per aiutarti
usa l'opzione -x della shell).

Ad esempio:

touch 'foo bar.c.txt'
for i in *.c.txt; do echo mv $i $(basename $i .c.txt).c; done | bash

chi conosce la soluzione (senza usare internet!) aspetti qualche giorno a
postarla cosi' da dare modo di lavorarci, in palio c'e' una o piu' birre per
quando torno per chi offre la soluzione completa di spiegazione del perche' e
percome :)

filippo
-- 
Filippo Giunchedi - http://esaurito.net - 0x6B79D401 - ⠠⠵

Recursion is the root of computation since it trades description for time.
-- Alan Perlis