[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