Probleme entre quote et backquote

clara -  
 pypik -
Bonjour,

Voici mon probleme, j'ai besoin de lancer une commande qui utilise des guillements en option. je lance cette commande entre backquote.

L'inconvénient est que automatiquement est rajouté un simple quote ce qui n'execute pas la commande.

`cat file.conf | grep -w PATTERN | awk '{ print "commande.exe","\""$1"\"",$2,$9".txt","1","1","20"}'`


La ligne s'affiche comme cela :

commande.exe '"coucou;moi"' PATTERN PATTERN.txt 1 1 20


J'ai bien essayé un tr -d \' mais ça ne fonctionne pas.

Merci de votre aide.

10 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

Essaie comme ça :
awk '{ print "commande.exe","\"$1\"",$2,$9".txt","1","1","20"}'`
;-))
0
clara
 
nope :(

Le $1 n'est pas pris en compte.

+++ awk '{ print "commande.exe","\"$1\"",$2,$9".txt","1","1","20"}'
++ TEST=commande.exe "$1" PATTERN PATTERN.txt 1 1 20
++ echo commande.exe '"$1"' PATTERN PATTERN.txt 1 1 20
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Je peux avoir un bout de ton fichier "file.conf" ici même ou sur cjoint s'il te plaît, merci ;-))
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Essaie comme ça alors :
awk '{ printf "%s \"%s\" %s %s %s  %s %s\n", "commande.exe",$1,$2,$9".txt","1","1","20" }'
;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
clara
 
Toujours pas... :(

En fait ce sont bien les backquotes qui posent probleme, pas vraiment le awk.

La awk me recupere bien la ligne de commande avec les options qui vont bien.

pour executer cette ligne de commande, je place des backquotes. Ces backquotes viennet ajouter des simples quotes entre les guillements qui foutent le m....
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
C'est bizarre ça que ça marche pas, chez moi sur un fichier comme "/etc/passwd" c'est nickel ;-\

Pourquoi encadres-tu la commande par des backquotes ??? Enlèves-les malheureuse ;-))

J'avais pas fait attention, je croyais que tu voulais récupérer le résultat dans une variable ;-(((
0
clara
 
Merci de ta patience.

en fait j'utilise les backquote car je souhaite que l'ensemble de la chaine qui est renvoyé par le awk soit executée.

Si je ne met pas les backquote, cette chaine est juste affichée.
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Tu peux développer s'il te plaît... je suis pas sûr de tout comprendre là ;-\

Si tu veux que chaque ligne retournée soit exécutée, il faut passer par une boucle alors...
0
clara
 
Ok on reprend depuis le debut :)

Directement depuis le prompt, je peux lancer la commande suivante qui fonctionne :

# commande.exe "coucou;moi" PATTERN PATTERN.txt 1 1 20


Je souhaite scripter l'execution de cette commande.

Lorsque le script est de la forme (sans backquote) :

#!/bin/sh
set -x
cat file.conf | grep -w $1 | awk '{ print "commande.exe","\""$1"\"",$2,$9".txt","1","1","20"}'


Le résultat est :
./script.sh PATTERN
++ cat file.conf
++ grep -w PATTERN
++ awk '{ print "commande.exe","\""$1"\"",$2,$9".txt","1","1","20"}'
commande.exe "coucou;cmoi" boubou PATTERN.sce 1 1 20


Ma commande est juste affichée.

Lorsque le script est :

#!/bin/sh
set -x
`cat file.conf | grep -w PATTERN | awk '{ print "commande.exe","\""$1"\"",$2,$9".txt","1","1","20"}'`

Le resultat est :
./script.sh PATTERN
++ cat file.conf
++ grep -w PATTERN
++ awk '{ print "commande.exe","\""$1"\"",$2,$9".txt","1","1","20"}'
++ commande.exe '"coucou;cmoi"' boubou PATTERN.sce 1 1 20
Test du 12/02/2008 a 15:37:43
Test du 12/02/2008 a 15:37:43
La commande ne fonctionne pas    


La commande est jouée (ce que je souhaite) mais la syntaxe n'est pas bonne à cause de ces quotes qui viennent entourer les guillemets.
0
pypik
 
Pour insérer un simple quote ' tu peux definir une variable "quote" qui contient le ' en question sur la ligne de commande shell : quote = " ' " (j'ai mis des espaces pour bien voir) puis utiliser cette variable dans la ligne de commande avec l'option -v de awk.

Exemple :

quote="'" ; echo "un deux" | awk -v quote=$quote '{print quote $1 quote}'

cela affichera : 'un'

Un autre exemple sur le même principe avec double quote où dblequote = " \ " " (j'aimis des espaces pour expliquer) :

dblequote="\"" ; echo "un deux" | awk -v dblequote=$dblequote '{print dblequote $1 dblequote}'

cela affichera : "un"
0