[resolu]question sur scripting bash

Bonjour,

J’ai une petite question sur bash.
Voici deux ptits scripts (que j’ai simplifié pour laisser que le minimum). Le premier fonctionne mais le deuxième ne fonctionne pas. La question est pourquoi ?

script1 qui fonctionne:

#!/bin/sh
var1=`sed -n "1"p input.reg`
echo $var1 | xargs /home/redsonic/scriptEcho.sh >> result.txt

script2 qui ne fonctionne pas :

#!/bin/sh
`sed -n "1"p input.reg` | xargs /home/redsonic/scriptEcho.sh >> result.txt

pour info, le script récupère avec sed la 1ere ligne de input.reg et la passe à scriptEcho.sh ce dernier fait un calcul et écrit dans result.txt.

Merci à tous !

Tu as sans doute des espaces dans var1. Essaye:

[code]echo ${var1} | xargs /home/redsonic/scriptEcho.sh >> result.txt

ou

echo “$var1” | xargs /home/redsonic/scriptEcho.sh >> result.txt[/code]

Je n’ai pas de problème avec var1; c’est lorsque je ne l’utilise pas que ça foire.
:stuck_out_tongue:

J’ai lu l’inverse. Désolé.

Non, je ne vois pas trop. La syntaxe me semble OK. A voir le script bash. Mais tu te compliques un peu la vie je pense. Tu pourrais tout faire dans ton script sans xargs.

[code]# Récupération de la première ligne:
var=$(head -n1 input.reg)

calcul et sortie

echo $((var*20)) >> result.txt

[/code]

Ou quelque chose du genre.

et si tu écris la même chose sans les backquotes (`) ca marche ?

#!/bin/sh sed -n "1"p input.reg | xargs /home/redsonic/scriptEcho.sh >> result.txt

mais c’est vrai que tu pourrais te passer de xargs… :stuck_out_tongue:

Cool, ça marche sans les et

Morale : le pipe sert à rediriger la sortie d’une commande et non pas la chaîne de caractère elle même.

Merci syrotas,
Bon weekend à tous

oui en fait le pipe redirige la sortie standard de ce qui est avant le pipe vers ce qui est après…
c’est pour ça qu’avec le echo var1 | cmd ca marchait bien…

Étant donné que sed renvoi les résultats vers la sortie standard, tu peux mettre directement ton pipe juste après…

Pour info, il me semble que sed blabla va essayer d’exécuter ce qui est renvoyé par sed
Par ex, si sed -n "1"p input.reg renvoi “maDonnée”, alors la commande `sed -n "1"p input.reg` essaye d’exécuter la commande “maDonnée”… à vérifier !