| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  01-07-2004, 16:55 | #1 | 
| Senior Member Iscritto dal: Feb 2004 Città: TREVISO 
					Messaggi: 902
				 | 
				
				bash-ta!!!
			 
		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: Codice: #!/bin/bash
pattern=$2
list=$(ls)
cmd=$1
for file in $list; do
    case $file in
	$pattern)
	    echo "esecuzione comando"
	    $cmd $file;;
    esac
done(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....... 
				__________________   | 
|   |   | 
|  01-07-2004, 17:14 | #2 | 
| Senior Member Iscritto dal: Apr 2000 Città: Roma 
					Messaggi: 15625
				 | 
		Perché Bash espande il pattern per te, e mette i match in $2, $3, ...quindi il _tuo_ $2 corrisponde già al primo match trovato, non alla stringa "pippo*"! Puoi fare così: Codice: #!/bin/bash
cmd=$1
shift
list=$*
for file in $list; do
    $cmd $file
done
				__________________ 0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 | 
|   |   | 
|  01-07-2004, 17:25 | #3 | 
| Senior Member Iscritto dal: Feb 2004 Città: TREVISO 
					Messaggi: 902
				 | 
		....aaaaaah...quindi quando eseguo l'assegnazione  pattern=$1 non assegna effettivamente il modello alla variabile pattern, ma gli assegna il primo match che riesce a trovare (quindi "pippa" in tal caso)... perciò non c'è modo affinchè assegni alla variabile $pattern il modello, se non usare lo shift, per far sì che venga attribuita con list=$* la lista di tutti i file (che fanno il match col pattern), da scadire poi col ciclo for...giusto? ....prima o poi ti faccio un monumento.....   
				__________________   | 
|   |   | 
|  01-07-2004, 17:27 | #4 | 
| Senior Member Iscritto dal: Apr 2000 Città: Roma 
					Messaggi: 15625
				 | 
		Sì c'è un modo, devi mettere in escape il carattere jolly. Così il tuo script funziona: script.sh rm p\* oppure: script.sh rm "p*" 
				__________________ 0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 | 
|   |   | 
|  01-07-2004, 17:31 | #5 | 
| Senior Member Iscritto dal: Feb 2004 Città: TREVISO 
					Messaggi: 902
				 | 
		....per evitare che faccia l'espansione....grazie ancora.... .............due monumenti allora..............   
				__________________   | 
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 01:04.









 
		 
		 
		 
		







 
  
 



 
                        
                        










