Quote:
Originariamente inviato da massimilianonball
Ciao ragazzi, non so se è giusto scrivere qui o nella sezione x so linux
Ad ogni modo il mio problema è questo: ho uno script in bash che gira su un server (ubuntu 12.04) che uso x configurare molto velocemente vlc come server di streaming; lo script mi permette di assegnare un valore a delle variabili che poi, compongono la stringa di lancio di vlc.
Per semplicità di esposizione riporto sotto la stringa:
Codice:
cvlc -vvv $budget "$input" --program="$serviceID" dvb://frequency="$frequenza" :dvb-adapter="$adapter" :dvb-bandwidth="$bandwith" --sout="#transcode{vcodec=$video,fps=,vb=$bitrate,scale=$scale,$size,acodec=$audio}:"$output"" $web 2>~/Desktop/vlc.log &
Avrete notato x esempio che le variabili budget o web (e altre), NON sono scritte con le virgolette, come invece dovrebbe essere; se infatti uso nella stringa tutte le variabili virgolettate (es. "$variabile"), la stringa non va.
Se invece uso la stringa come sopra tutto funziona..
Sta cosa mi fa incavolare x 2 motivi:
1. non capisco xké lo script si comporti in questo modo
2. ogni volta che faccio una modifica e aggiungo/tolgo una variabile, iniziano i mal di pancia xké devo capire a quale variabile mettere/togliere le virgolette..
Ultima stranezza:
a volte provo ad inserire TUTTA la stringa in un echo (es. echo "stringa"), x vedere cosa effettivamente mi lancia lo script: il risultato è che la stringa lanciata è LA STESSA sia mettendo le virgolette ad ogni variabile, sia assegnandole come sopra; ma solo in questo modo lo script va..

|
Da
http://www.gnu.org/software/bash/man...le-Quotes.html
Quote:
|
Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘\’, and, when history expansion is enabled, ‘!’
|
Ovvero tutti i caratteri tranne $ ` \ ! vengono interpretati letteralmente. In particolare lo spazio viene interpretato come parte della parola e non separatore degli argomenti. Che vuol dire ?
Vuol dire che se io scrivo
Codice:
cvlc -vvv $budget "$input" --program="$serviceID"
cvlc si vede passare 4 parametri, ovvero
-vvv
il contenuto di $budget (non proprio, vedi sotto)
il contenuto di $input
--program=<il contenuto di $serviceID
Se tu scrivi invece
Codice:
cvlc "-vvv $budget $input --program=$serviceID"
Il programma si vede passare un unico agomento, corrispondente alla valutazione di
-vvv $budget $input --program=$serviceID