akyra
01-07-2004, 16:55
sto facendo uno script in bash che dovrebbe fare quanto segue:
l'utente chiama lo script con "nomescript.sh rm pattern" ed esegue rm su tutti i file della dir corrente che hanno una corrispondenza con "pattern".
Niente di trascendentale, soltanto che la cosa (tanto per cambiare) non funzia come dico io. il codice è il seguente:
#!/bin/bash
pattern=$2
list=$(ls)
cmd=$1
for file in $list; do
case $file in
$pattern)
echo "esecuzione comando"
$cmd $file;;
esac
done
il problema è che, se ho due file che si chiamano, ad es., "pippo" e "pippa"
(non mi venivano altri nomi...) l'esecuzioni di
script.sh rm p*
(dove p* è appunto il pattern) mi elimina solo il file "pippa", e non il file "pippo"...pechè?!!?!?!?! (.....serie di convulsioni facciali....)
da quanto ne so, il ciclo for dovrebbe attribuire di volta in volta un nuovo elemento alla variabile $file di quelli presenti in $list (che contiene la lista dei file presenti nella directory), e ciò accade regolarmente...ma allora perchè non esegue "rm" su tutti i file, ma solo sul primo che incontra?
(infatti se rieseguo lo script una volta che il file "pippa" è già stato eliminato, allora mi elimina anche "pippo")...
qualcuno m'aiuti....sigh.......
l'utente chiama lo script con "nomescript.sh rm pattern" ed esegue rm su tutti i file della dir corrente che hanno una corrispondenza con "pattern".
Niente di trascendentale, soltanto che la cosa (tanto per cambiare) non funzia come dico io. il codice è il seguente:
#!/bin/bash
pattern=$2
list=$(ls)
cmd=$1
for file in $list; do
case $file in
$pattern)
echo "esecuzione comando"
$cmd $file;;
esac
done
il problema è che, se ho due file che si chiamano, ad es., "pippo" e "pippa"
(non mi venivano altri nomi...) l'esecuzioni di
script.sh rm p*
(dove p* è appunto il pattern) mi elimina solo il file "pippa", e non il file "pippo"...pechè?!!?!?!?! (.....serie di convulsioni facciali....)
da quanto ne so, il ciclo for dovrebbe attribuire di volta in volta un nuovo elemento alla variabile $file di quelli presenti in $list (che contiene la lista dei file presenti nella directory), e ciò accade regolarmente...ma allora perchè non esegue "rm" su tutti i file, ma solo sul primo che incontra?
(infatti se rieseguo lo script una volta che il file "pippa" è già stato eliminato, allora mi elimina anche "pippo")...
qualcuno m'aiuti....sigh.......