[MontelLUG] Variabili d'ambiente con valori quotati in script

Samuele samuele.zanin a tiscali.it
Dom 28 Set 2014 16:25:02 CEST


Esimi, ennesimo casino con la shell.

In uno script, volevo parametrizzare tramite variabile d'ambiente i
parametri che vengono passati ad un comando. La particolarità è che
questo comando vuole alcuni argomenti quotati:

Ecco come verrebbe lanciato manualmente al prompt (tutto su un'unica riga):

LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i
"input_raspicam.so -fps 30 -q 100 -x
1024 -y 768 -rot 180 -ex sports" -o "output_http.so -p 9000 -w
/opt/mjpg-streamer/www"

Io ho provato a definire due variabili:
PARAMETRI_RASPICAM="\"input_raspicam.so -fps 30 -q 100 -x 1024 -y 768
-rot 180 -ex sports\""
PARAMETRI_OUTPUT="\"output_http.so -p 9000 -w /opt/mjpg-streamer/www\""

Facendo:

echo /opt/mjpg-streamer/mjpg_streamer -i ${PARAMETRI_RASPICAM} -o
$PARAMETRI_OUTPUT

l'echo mi mostra:

/opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 30 -q 100 -x
1024 -y 768 -rot 180 -ex sports" -o "output_http.so -p 9000 -w
/opt/mjpg-streamer/www"

che corrisponde esattamente al comando da dare.
Se copio ed incollo quella stringa sulla shell funziona.

Se però lancio il tutto da script, ottengo:
/opt/mjpg-streamer/mjpg_streamer: unrecognized option '-fps'

che è lo stesso errore che ottengo se lancio:
/opt/mjpg-streamer/mjpg_streamer -i input_raspicam.so -fps 30 -q 100 -x
1024 -y 768 -rot 180 -ex sports -o output_http.so -p 9000 -w
/opt/mjpg-streamer/www

in pratica mi vengono tolti gli " con i quali è racchiuso il valore del
parametro i.

Ho provato a spostare gli " da dentro al contenuto della variabile al di
fuori, sostituire $ con $() e ${}, mettere apice singolo ecc.

Alla fine ho risolto creando due file .sh che vengono richiamati da
quello principale a seconda di che parametri devo passare, però mi
piacerebbe capire come fare.
Il manuale di bash sul capitolo del quoting non mi è stato di aiuto.




More information about the montellug mailing list