Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1135 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [bash] guillemets et quote

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash] guillemets et quote

n°675678
Riot
Buy me a riot
Posté le 10-05-2005 à 19:35:16  profilanswer
 

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.

mood
Publicité
Posté le 10-05-2005 à 19:35:16  profilanswer
 

n°675688
madkat
Posté le 10-05-2005 à 19:51:59  profilanswer
 

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

n°675689
Riot
Buy me a riot
Posté le 10-05-2005 à 19:58:24  profilanswer
 

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.

n°675700
madkat
Posté le 10-05-2005 à 20:21:36  profilanswer
 

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)

n°675706
jlighty
Posté le 10-05-2005 à 20:33:45  profilanswer
 

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


Message édité par jlighty le 10-05-2005 à 20:33:56
n°675722
Riot
Buy me a riot
Posté le 10-05-2005 à 21:17:07  profilanswer
 

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
n°675725
jlighty
Posté le 10-05-2005 à 21:19:37  profilanswer
 

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
n°675733
Riot
Buy me a riot
Posté le 10-05-2005 à 21:27:28  profilanswer
 

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
n°675740
jlighty
Posté le 10-05-2005 à 21:35:19  profilanswer
 

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
n°675747
Riot
Buy me a riot
Posté le 10-05-2005 à 21:41:57  profilanswer
 

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)

mood
Publicité
Posté le 10-05-2005 à 21:41:57  profilanswer
 

n°675749
jlighty
Posté le 10-05-2005 à 21:45:16  profilanswer
 

à 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
n°675755
Riot
Buy me a riot
Posté le 10-05-2005 à 21:52:32  profilanswer
 

: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
n°675776
jlighty
Posté le 10-05-2005 à 22:18:21  profilanswer
 

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
n°675787
Riot
Buy me a riot
Posté le 10-05-2005 à 22:35:06  profilanswer
 

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.

n°1021192
mr simon
Posté le 13-03-2008 à 00:19:29  profilanswer
 

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
n°1021202
Fork Bomb
Obsédé textuel
Posté le 13-03-2008 à 07:44:54  profilanswer
 

"${CMD}"


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1021230
initiators
Posté le 13-03-2008 à 08:59:13  profilanswer
 

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
n°1021267
mr simon
Posté le 13-03-2008 à 10:44:59  profilanswer
 

initiators a écrit :

Si echo produit le bon resultat alors


echo $VDRCMD | sh


devrait etre OK


 
Merci ça marche très bien !!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [bash] guillemets et quote

 

Sujets relatifs
[Bash] "un truc qui tourne"[bash] Compte le nombre de caractères ds 1 variable ?
[bash] activer l'auto completion apres sudoTaille sur le disque en bash
commandes bash: assembler deux commandes.Test d'égalité en bash ?
[bash] Comment utiliser return pour retourner une valeur ?script bash qui plante
executer rsh dans un script bash[bash] chown dans un script
Plus de sujets relatifs à : [bash] guillemets et quote


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR