2011-11-07 17 views
5

Devo scrivere uno script che genera ed esegue un comando con un numero variabile di argomenti contenenti nomi di file. Questi nomi di file possono contenere spazi e tutto deve funzionare bene con o senza spazi.Esecuzione di un comando creato dinamicamente con spazi nello script di shell

Ad esempio, questo ha generato comando potrebbe assomigliare a questo:

curl --data-urlencode "[email protected]/tmp/some folder/data.txt" http://www.someurl.com 

Se uso un comando codificato duro ed eseguirlo tutto funziona bene, con e senza spazi. Se creo il testo del comando in una variabile stringa, ed eseguo il contenuto della stringa, sembra che il comando non tenga conto delle virgolette, usando solo la prima parte del file:

Lo script (semplificato, solo immagini la stringa di comando viene creata usando regole complesse):

#!/bin/sh 
#prepare 
command="curl --data-urlencode \"[email protected]/tmp/some folder/data.txt\" www.someurl.com" 
#execute 
$command 

I risultati:

$ ./test.sh 
Warning: Couldn't read data from file ""[email protected]/tmp/some", this makes an 
Warning: empty POST. 
curl: (6) Couldn't resolve host 'folder' 

ho provato cose diverse, passando stile citazioni, utilizzando le cose come exec, ma mi aspettavo qualcosa ottenere questo al lavoro .

Qualsiasi aiuto sarebbe apprezzato

Grazie

Nota: dovrei aggiungere tutto questo test è fatto su Cygwin. Potrebbe essere importante per quanto riguarda la sintassi del percorso.

+0

Prova sostituire lo spazio con "\" – spicavigo

+0

@spicavigo provato che già senza risultati:/ – Shtong

+0

è possibile scambiare qualche dbl-quotes per virgolette singole ?, es. command = "curl --data-urlencode 'param_value @/tmp/some folder/data.txt' www.someurl.com" ... Buona fortuna! – shellter

risposta

0

Hai provato:

command='curl --data-urlencode "[email protected]/tmp/some\ folder/data.txt" www.someurl.com' 
+0

Ho fatto, ma mi dispiace, gli stessi risultati! – Shtong

+0

@Shtong: Ho dimenticato di rimuovere l'escape della seconda virgoletta. Modificato nel mio codice ora. – flesk

+0

Oh, non ho visto il tuo errore, ma con o senza errore l'errore è lo stesso :) – Shtong

4

si dovrebbe usare eval:

eval "$command" 
+0

Nessuna fortuna. Il comando non funziona, ma perché cerca l'arricciatura nella directory corrente piuttosto che nella directory bin. (dice/home/Shtong/arricciatura non esiste) – Shtong

+0

Funziona come un fascino per me =) –

Problemi correlati