[bash] guillemets et quote

guillemets et quote [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 10-05-2005 à 19:35:16    

Hello!
J'ai un programme (VDR) qui est lancé par un script bash (runvdr).
Dans ce script, on passe les options à VDR; comme par exemple les plugins à utiliser, ainsi que leurs paramètres.
Voici le runvdr:

Code :
  1. #!/bin/bash
  2. VDRPRG="/usr/local/src/VDR/vdr"
  3. VDRCMD="$VDRPRG -Pxine -Pstreamdev-client $*"
  4. KILL="/usr/bin/killall -q -TERM"
  5. while (true) do
  6.       $VDRCMD
  7.       if test $? -eq 0; then exit; fi
  8.       date
  9.       echo "restarting VDR"
  10.       $KILL $VDRPRG
  11.       sleep 10
  12.       date
  13. done


 
les plugins sont passés avec l'option -P.
Ici j'appelle donc les plugins xine et streamdev-client.
 
Mon problème arrive lorsque je veux passer un paramètre à un de ces plugins (par exemple xine); normalement je devrais procéder de la sorte:

Code :
  1. VDRCMD="$VDRPRG -P 'xine -r' -Pstreamdev-client $*"


Seulement lorsque j'execute le script, j'ai l'erreur suivante:

Code :
  1. vdr: /usr/local/src/VDR/PLUGINS/lib/libvdr-'xine.so.1.3.12: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type


Le nom correct de la lib est bien entendu libvdr-xine.so.1.3.12 .
 
Note: lorsque j'appelle directement VDR avec les options kivontbien, il n'y a aucun problème. Ex:

Code :
  1. /usr/local/src/VDR/vdr -P 'xine -r' -Pstreamdev-client


 
Je suis en contact avec d'autres utilisateurs de VDR et je leur ai exposé le problème, mais chez_eux_ça_marche(:D) avec le même script et la même version de VDR.
 
Pour mettre certains doutes de côté, j'ai mis à jour bash (je suis sous Debian SID) ainsi que les locales.
J'ai même essayé avec ash au lieu de bash; sans amélioration; j'ai aussi essayé de changer d'éditeur de texte (emacs, vi, nano): idem.

Reply

Marsh Posté le 10-05-2005 à 19:35:16   

Reply

Marsh Posté le 10-05-2005 à 19:51:59    

Citation :


Ca marche pas

Code :
  1. VDRCMD="$VDRPRG -Pxine -Pstreamdev-client $*"


Note: lorsque j'appelle directement VDR avec les options kivontbien, il n'y a aucun problème. Ex:  

Code :
  1. Code :
  2. /usr/local/src/VDR/vdr -P 'xine -r' -Pstreamdev-client




Dans la premiere ligne de commande le $* signifie "tous les arguments" et il est a la fin.
En gros quand tu appelle %runvdr 'xine -r' ca donne a l'interieur du script la ligne  

Code :
  1. $VDRPRG -Pxine -Pstreamdev-client 'xine -r'


 
Je pense que ton probleme viens de la.
J'ai bon ?  :D

Reply

Marsh Posté le 10-05-2005 à 19:58:24    

Oui mais non :D
$* sert juste à pour passer des paramètres à runvdr.
Ex: tu testes un plugins, pour ça tu fais un:

Code :
  1. runvdr -Pplugin


Ça évite d'éditer le runvdr tout le temps.
Le problème n'est donc pas là.
 
Merci quand-même!
riot.

Reply

Marsh Posté le 10-05-2005 à 20:21:36    

Je comprend pas tres bien le titre de ton post, mais si c'est un probleme de cote, tu peux essayer de mettre un \ devant tes cotes dans le script (tu le sais peut etre je connais pas ton niveau en bash)

Reply

Marsh Posté le 10-05-2005 à 20:33:45    

tu pourrais essayer:
 VDRCMD="$VDRPRG -P \"xine -r\" -Pstreamdev-client $*"


Message édité par jlighty le 10-05-2005 à 20:33:56
Reply

Marsh Posté le 10-05-2005 à 21:17:07    

Madkat> le problème est que je dois entourer le plugin et son/ses param avec des quote ou des guillemmets, et ce dans une chaine qui est déjà dans des guillemets (cf mon 1er post).
 
Madkat & Jlighty> j'ai déjà pensé à l'antislash, mais une erreur similaire à la précédente se produit:

Code :
  1. vdr: /usr/local/src/VDR/PLUGINS/lib/libvdr-\'xine\'.so.1.3.12: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type


Idem avec les guillemets.


Message édité par Riot le 10-05-2005 à 21:21:44
Reply

Marsh Posté le 10-05-2005 à 21:19:37    

pourtant quand je remplace $VDRCMD par echo $VDRCMD
j'obtiens ceci :

Code :
  1. /usr/local/src/VDR/vdr -P "xine -r" -Pstreamdev-client


tu passes quels paramètres à runvdr ?


Message édité par jlighty le 10-05-2005 à 21:21:27
Reply

Marsh Posté le 10-05-2005 à 21:27:28    

En effet l'echo produit le bon résultat, mais si j'exécute $VDRCMD, l'erreur se produit:

Code :
  1. VDRCMD="$VDRPRG -P 'xine -r'"
  2. ...
  3. echo $VDRCMD
  4. $VDRCMD


produit:

Code :
  1. /usr/local/src/VDR/vdr -P 'xine -r'
  2. vdr: /usr/local/src/VDR/PLUGINS/lib/libvdr-'xine -r'.so.1.3.12: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type


 
Je ne passe aucun argument à runvdr. (Tu peux oublier l'histoire du $*, ça n'a pas de rapport avec le problème).
 
Merci encore!


Message édité par Riot le 10-05-2005 à 21:29:07
Reply

Marsh Posté le 10-05-2005 à 21:35:19    

excuse moi de te faire répéter mais je voudrais être sûr que la commande "/usr/local/src/VDR/vdr -P 'xine -r'" exécutée à la main marche


Message édité par jlighty le 10-05-2005 à 21:42:51
Reply

Marsh Posté le 10-05-2005 à 21:41:57    

Oui oui pas de problème:

Code :
  1. [punky@laptop]
  2. ~> /usr/local/src/VDR/vdr -P 'xine -r'
  3. SetVolumeDevice: 215


Donc ça marche.
 
(ne t'excuse pas! :D)

Reply

Marsh Posté le 10-05-2005 à 21:41:57   

Reply

Marsh Posté le 10-05-2005 à 21:45:16    

à situation bizarre solution bizarre  :D  :
essaye de mettre les quotes pour ouvrir un second shell
`$VDRCMD`


Message édité par jlighty le 10-05-2005 à 21:45:43
Reply

Marsh Posté le 10-05-2005 à 21:52:32    

:D
Déjà tenté, même chose:

Code :
  1. vdr: /usr/local/src/VDR/PLUGINS/lib/libvdr-'xine.so.1.3.12: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou répertoire de ce type


 
ps: idem avec exec  
:S


Message édité par Riot le 10-05-2005 à 21:54:03
Reply

Marsh Posté le 10-05-2005 à 22:18:21    

pour te remonter le moral   :D :
http://vdrportal.de/board/thread.php?postid=27466 (la dernière page)
par contre j'espère que tu connais la langue de Goeth


Message édité par jlighty le 10-05-2005 à 22:21:29
Reply

Marsh Posté le 10-05-2005 à 22:35:06    

Arf!
J'ai fait des recherches sur Google aussi et je suis tombé sur des sites en allemand, mais je ne comprends pas un traitre mot :/
J'ai passé le dernier post du gars au traducteur google (pas mal d'ailleurs :)) et il s'avère qu'il n'a pas de solution...
 
Merci pour ton aide en tout cas.
Je continue dans ma quète.

Reply

Marsh Posté le 13-03-2008 à 00:19:29    

Je suis en train d'écrire un script bash et j'ai le même problème.  
 
Je détaille un peu ce que je veux faire:
 
Je veux exécuter la commande suivante

Code :
  1. rsync --filter=': $fichier' src/ dest/


De cette manière, la variable fichier n'est pas interprétée.  
 
J'ai essayé

Code :
  1. CMD="rsync --filter=': $fichier' src/ dest/"
  2. $CMD ou `$CMD`


Mais les deux me renvoient cette erreur:

Code :
  1. Unknown filter rule: `':'


Avez-vous une solution ?
Merci.


Message édité par mr simon le 13-03-2008 à 00:19:55
Reply

Marsh Posté le 13-03-2008 à 07:44:54    

"${CMD}"


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 13-03-2008 à 08:59:13    

Si echo produit le bon resultat alors


echo $VDRCMD | sh


devrait etre OK

Message cité 1 fois
Message édité par initiators le 13-03-2008 à 08:59:51
Reply

Marsh Posté le 13-03-2008 à 10:44:59    

initiators a écrit :

Si echo produit le bon resultat alors


echo $VDRCMD | sh


devrait etre OK


 
Merci ça marche très bien !!!

Reply

Sujets relatifs:

Leave a Replay

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