problème avec variable à contenu "complexe"

problème avec variable à contenu "complexe" - Shell/Batch - Programmation

Marsh Posté le 08-01-2018 à 15:38:54    

Bonjour,
 
Je m'arrache depuis un certain temps sur un script shell qui n'exécute pas correctement une commande parce que je suppose ( je n'arrive pas à voir le problème ) que le contenu de la variable est trop complexe et que des choses sont perdues.
 
Si je fais ça, ça marche ( ignorez $1 $2, $4 , le problème n'est pas là )
 

Code :
  1. TOTO="-re -threads 8 -framerate 60 -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -f x11grab -draw_mouse 0 -video_size 1280x720 -i :0.0 -vsync 0 -vf 'fps=24,hwupload,format=nv12|vaapi' -c:v h264_vaapi -g 72 -qp 29 -an -f mpegts udp://227.50.1.14:30120"
  2. echo "TOTO : " $TOTO
  3. start-stop-daemon --nicelevel $4 --start --quiet --background --make-pidfile --pidfile $2 --exec $1 -- -re -threads 8 -framerate 60 -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -f x11grab -draw_mouse 0 -video_size 1280x720 -i :0.0 -vsync 0 -vf 'fps=24,hwupload,format=nv12|vaapi' -c:v h264_vaapi -g 72 -qp 29 -an -f mpegts udp://227.50.1.14:30120


 
 
par contre si je fais ça, ça marche pas :
 

Code :
  1. TOTO="-re -threads 8 -framerate 60 -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -f x11grab -draw_mouse 0 -video_size 1280x720 -i :0.0 -vsync 0 -vf 'fps=24,hwupload,format=nv12|vaapi' -c:v h264_vaapi -g 72 -qp 29 -an -f mpegts udp://227.50.1.14:30120"
  2. echo "TOTO : " $TOTO
  3. start-stop-daemon --nicelevel $4 --start --quiet --background --make-pidfile --pidfile $2 --exec $1 -- $TOTO


 
 
Alors que ca marche pour d autres programmes si les paramètres sont moins complexes, je n'arrive pas à voir si c'est les " ' " , ou les " : " de ma ligne de commande qui gênent.
 
A noter que si je fais ca, ca ne marche pas non plus ( notez les guillemets supplémentaires autour des paramètres )
 

Code :
  1. TOTO="-re -threads 8 -framerate 60 -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -f x11grab -draw_mouse 0 -video_size 1280x720 -i :0.0 -vsync 0 -vf 'fps=24,hwupload,format=nv12|vaapi' -c:v h264_vaapi -g 72 -qp 29 -an -f mpegts udp://227.50.1.14:30120"
  2. echo "TOTO : " $TOTO
  3. start-stop-daemon --nicelevel $4 --start --quiet --background --make-pidfile --pidfile $2 --exec $1 -- "-re -threads 8 -framerate 60 -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -f x11grab -draw_mouse 0 -video_size 1280x720 -i :0.0 -vsync 0 -vf 'fps=24,hwupload,format=nv12|vaapi' -c:v h264_vaapi -g 72 -qp 29 -an -f mpegts udp://227.50.1.14:30120"

 
 
 
Une idée comment contourner le problème ? je ne suis pas très bon en bash, je n'arrive pas çà voir la subtilité.
 
Merci d'avance :jap:

Reply

Marsh Posté le 08-01-2018 à 15:38:54   

Reply

Marsh Posté le 08-01-2018 à 15:48:33    

c'est un truc de ouf , j'ai tenté de logguer la ligne de commande dans un fichier :  
 

Code :
  1. echo "start-stop-daemon --nicelevel $4 --start --quiet --background --make-pidfile --pidfile $2 --exec $1 -- -re -threads 8 -framerate 60 -vaapi_device /dev/dri/renderD128 -hwaccel vaapi -f x11grab -draw_mouse 0 -video_size 1280x720 -i :0.0 -vsync 0 -vf 'fps=24,hwupload,format=nv12|vaapi' -c:v h264_vaapi -g 72 -qp 29 -an -f mpegts udp://227.50.1.14:30120" > /tmp/1.log
  2. echo "start-stop-daemon --nicelevel $4 --start --quiet --background --make-pidfile --pidfile $2 --exec $1 -- $TOTO" > /tmp/2.log


 
1.log et 2.log sont identiques.
 
Pourtant, si j'exécute la ligne 1, le programme s'exécute bien, si j'exécute la ligne 2 il se quitte. Je n'arrive pas à voir pourquoi il se quitte j'ai aucun log nulle part. Je suppose qu'il y a quelque chose qui ne va pas dans la ligne de commande mais quoi ?

Reply

Marsh Posté le 08-01-2018 à 16:02:53    

bon , trouvé. Pour une raison que je n'ai pas encore bien comprise, il ne faut pas que je mette les " ' " quand je passe par une variable. Par contre dans la ligne de commande directe, il faut le faire sinon ca ne marche pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed