Ma commande est juste affichée et la syntaxte est tout à fait correcte.
- Lorsque le script est (ligne entre backquote) :
#!/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
La commande ne fonctionne pas
La commande est lancée (ce que je souhaite) mais la syntaxe n'est pas
bonne à cause de ces quotes qui viennent entourer les guillemets.
Je souhaite donc pouvoir lancer ma commande depuis un script.
Ma commande est juste affichée et la syntaxte est tout à fait correcte.
Oui, c'est une syntaxe qui pourrait etre interpretee par un shell.
- Lorsque le script est (ligne entre backquote) : #!/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 La commande ne fonctionne pas
La commande est lancée (ce que je souhaite) mais la syntaxe n'est pas bonne à cause de ces quotes qui viennent entourer les guillemets. [...]
`xxx` ou $(xxx)
ne fait pas en sorte que l'output de xxx soit interpreté comme du code shell. Encore heureux, sinon, ca voudrait dire que:
echo `echo 'foo; rm -rf $HOME'`
effacerait ton home-directory.
Non, `xxx` est decoupé en une list de mots suivant $IFS et ensuite chaque mot est sujet a filename generation. Et ca donne une liste d'arguments. Le premier est utilisé pour determiner la commande a executer.
Les quotes ci-dessus ne sont ajoutee que pour l'affichage de set -x pour bien montrer les arguments.
Donc, soit:
eval "$( grep -w PATTERN < file.conf | awk ' { print "commande.exe "" $1 "" " $2 " " $9 ".txt 1 1 20"}' )" (eval permet d'interpreter une chaine de caracteres dans le shell courant).
Soit: grep -w PATTERN < file.conf | awk ' {print "commande.exe "" $1 "" " $2 " " $9 ".txt 1 1 20"}' | sh (la c'est un autre shell qui l'interprete)
soit par exemple:
set -f # disable filename generation IFS='|' # separateur plus pratique que celui par defaut (espaces) $(grep -w PATTERN < file.conf | awk ' {print "commande.exe|" $1 "|" $2 "|" $9 ".txt|1|1|20"}')
Note que -w n'est pas une option standard de grep donc, tu peux aussi bien faire:
Ma commande est juste affichée et la syntaxte est tout à fait correcte.
Oui, c'est une syntaxe qui pourrait etre interpretee par un
shell.
- Lorsque le script est (ligne entre backquote) :
#!/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
La commande ne fonctionne pas
La commande est lancée (ce que je souhaite) mais la syntaxe n'est pas
bonne à cause de ces quotes qui viennent entourer les guillemets.
[...]
`xxx` ou $(xxx)
ne fait pas en sorte que l'output de xxx soit interpreté comme
du code shell. Encore heureux, sinon, ca voudrait dire que:
echo `echo 'foo; rm -rf $HOME'`
effacerait ton home-directory.
Non, `xxx` est decoupé en une list de mots suivant $IFS et
ensuite chaque mot est sujet a filename generation. Et ca donne
une liste d'arguments. Le premier est utilisé pour determiner la
commande a executer.
Les quotes ci-dessus ne sont ajoutee que pour l'affichage de set
-x pour bien montrer les arguments.
Donc, soit:
eval "$(
grep -w PATTERN < file.conf | awk '
{ print "commande.exe "" $1 "" " $2 " " $9 ".txt 1 1 20"}'
)"
(eval permet d'interpreter une chaine de caracteres dans le
shell courant).
Soit:
grep -w PATTERN < file.conf | awk '
{print "commande.exe "" $1 "" " $2 " " $9 ".txt 1 1 20"}' | sh
(la c'est un autre shell qui l'interprete)
soit par exemple:
set -f # disable filename generation
IFS='|' # separateur plus pratique que celui par defaut (espaces)
$(grep -w PATTERN < file.conf | awk '
{print "commande.exe|" $1 "|" $2 "|" $9 ".txt|1|1|20"}')
Note que -w n'est pas une option standard de grep donc, tu peux
aussi bien faire:
Ma commande est juste affichée et la syntaxte est tout à fait correcte.
Oui, c'est une syntaxe qui pourrait etre interpretee par un shell.
- Lorsque le script est (ligne entre backquote) : #!/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 La commande ne fonctionne pas
La commande est lancée (ce que je souhaite) mais la syntaxe n'est pas bonne à cause de ces quotes qui viennent entourer les guillemets. [...]
`xxx` ou $(xxx)
ne fait pas en sorte que l'output de xxx soit interpreté comme du code shell. Encore heureux, sinon, ca voudrait dire que:
echo `echo 'foo; rm -rf $HOME'`
effacerait ton home-directory.
Non, `xxx` est decoupé en une list de mots suivant $IFS et ensuite chaque mot est sujet a filename generation. Et ca donne une liste d'arguments. Le premier est utilisé pour determiner la commande a executer.
Les quotes ci-dessus ne sont ajoutee que pour l'affichage de set -x pour bien montrer les arguments.
Donc, soit:
eval "$( grep -w PATTERN < file.conf | awk ' { print "commande.exe "" $1 "" " $2 " " $9 ".txt 1 1 20"}' )" (eval permet d'interpreter une chaine de caracteres dans le shell courant).
Soit: grep -w PATTERN < file.conf | awk ' {print "commande.exe "" $1 "" " $2 " " $9 ".txt 1 1 20"}' | sh (la c'est un autre shell qui l'interprete)
soit par exemple:
set -f # disable filename generation IFS='|' # separateur plus pratique que celui par defaut (espaces) $(grep -w PATTERN < file.conf | awk ' {print "commande.exe|" $1 "|" $2 "|" $9 ".txt|1|1|20"}')
Note que -w n'est pas une option standard de grep donc, tu peux aussi bien faire:
La syntaxe est importante, et je souhaite scripter l'execution de cette
commande en recuperant les options dans un fichier.
- J'ai testé quelques trucs. Lorsque le script est de la forme (sans
backquote donc) :
[snip]
Ma commande est juste affichée et la syntaxte est tout à fait corre cte.
- Lorsque le script est (ligne entre backquote) :
[snip]
La commande est lancée (ce que je souhaite) mais la syntaxe n'est pas
bonne à cause de ces quotes qui viennent entourer les guillemets.
Je souhaite donc pouvoir lancer ma commande depuis un script.
Merci à vous.
Hi, Bonjour,
au choix :
grep -w "$1" file.conf | awk ... | sh
ou
eval $(grep -w "$1" file.conf | awk ...)
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.