Purtroppo mi trovo ad affrontare un progetto dell'uni in bash scripting non avendolo studiato granchè e avendo o due dispensine striminzite del prof.. o pdf in inglese di 500 pagine.. e siccome ho 10 giorni scarsi.. ogni tanto mi trovo a chiedere aiuto anche per cose medio/banali (dopo averci sbattuto un po' la testa
) ^_^
Il progetto: devo emulare la funzione rsync SOLO nel funzionamento locale (da una dir all'altra) e con alcuni parametri
Il problema specifico: il problema specifico è che devo copiare file per file perchè devo discriminare la copia di ogni singolo file a seconda di alcuni flag. Ma questo non vi interessa se non per dovere di cronaca.
Il punto è che ho problemi ad implementare la (mutua) ricorsione quando devo copiare una directory con il suo contenuto
semplifico all'osso il codice.. la funzione principale è start_copy che riceve dal main una lista di file in cui i primi (di numero imprecisato) sono sorgenti e l'ultimo è la directory di destinazione.
codice:
start_copy() {
dest=${!#} #l'ultimo parametro è la destinazione
for file in $* #ciclo su tutti i parametri
do
#esco dal ciclo quando arrivo all'ultimo
#parametro che è uguale alla destinazion
if [ $file == $dest ]
then break
fi
#dopo vari controlli arrivo al punto
#in cui devo copiare
if [ -d $file ]
then copy_dir $file $dest
else copy $file $dest
fi
done
}
copy() {
#dopo vari controlli copia, se necessario, così
cp $1 $2/`basename $1`
}
copy_dir() {
#dopo vari controlli arrivo qui
mkdir $2/`basename $1` #crea la dir
#faccio la chiamata ricorsiva passando il contenuto della
#dir che sto copiando
start_copy "`ls -x $1` $2/`basename $1`"
}
Ora.. dopo mille problemi sono arrivato a questo punto.. che dovrebbe funzionare... ma il problema è che alla seconda chiamata di start_copy (quando a chiamarla è copy_dir) come ultimo parametro (${!#}) mi trovo l'intera lista di parametri e non solo l'ultimo (la destinazione corrente) come mi aspetterei...
in più mi va in loop... probabilmente proprio per questo errore
qualcuno è così paziente da aiutarmi a capire dove cacchio sbaglio? 
tnx