2017-10-04 5 views
0

Je viens d'avoir cette erreur en essayant de réécrire mon code.grep & wget en conflit via la variable

Ce code fonctionne comme prévu:

#XML downloading 
wget -q http://192.168.50.154/details.xml -O details.xml 

#load XML in Variable 
rohxml=details.xml 

#Read Data and save to Variable 
health=$(grep '<Health' $rohxml | cut -f2 -d">"|cut -f1 -d"<") 

Mais lorsque je tente de l'enregistrer directement à une variable (parce que je ne peux pas enregistrer un nouveau fichier dans le nouveau serveur), il me jette l'erreur suivante:

grep: invalid option -- 'O' Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information.

Voici le code "nouveau":

#load XML in Variable 
ABFRAGE="'wget -q -O- http://192.168.50.154/details.xml'" 
rohxml=$ABFRAGE 

#Read Data and save to Variable 
health=$(grep '<Health' $rohxml | cut -f2 -d">"|cut -f1 -d"<") 
+0

Vous ne savez vous stockez la ligne de commande wget dans une variable puis l'exécuter sur la ligne de commande grep plutôt que d'enregistrer la sortie de la commande dans une variable, non? Ne fais pas ça - c'est à ça que servent les fonctions. Comme vous l'écrivez, vous vous exposez à de mauvaises surprises lorsque vous l'exécutez à partir de certains répertoires, etc. lorsque vous exposez votre commande à l'interpréteur pour l'expansion générique, l'écrasement, la division de mots, etc. –

+0

N'ajoutez pas "RESOLU" à le titre. Pour indiquer que votre question a été répondue, acceptez une réponse (habituellement, vous voudrez la modifier également). Si aucune des réponses existantes ne résout votre problème, vous pouvez publier et accepter vous-même une réponse. –

Répondre

0

Vous avez des malentendus fondamentaux de la façon dont fonctionne shell. Essayez ceci:

rohxml="$(wget -q -O- 'http://192.168.50.154/details.xml')" 
health="$(awk -F'[<>]' '/<Health/{ print $3 }' <<<"$rohxml")" 
printf 'health="%s"\n' "$health" 

puis demandez si vous avez des questions. Je suppose que vous avez une certaine utilité pour les variables rohxml et health au-delà du code affiché sinon tout ce que vous avez besoin est:

wget -q -O- 'http://192.168.50.154/details.xml' | 
awk -F'[<>]' '/<Health/{ print $3 }' 
2

Vous avez stocké la chaîne

'wget -q -O- http://192.168.50.154/details.xml' 

dans la variable $ rohxml, pas la sortie de la commande. Utilisez des guillemets pour stocker la sortie.

De plus, pour extraire des informations de XML, utilisez un outil compatible XML. Pour les requêtes simples, xmllint devrait fonctionner assez bien.

+0

Maintenant, j'ai ABFRAGE = "' wget -q -O- http: // 192.168.50.154/details.xml' " Mais maintenant, il n'est pas l'analyse correcte des commandes (je reçois des erreurs de l'autre substance XML que je ' m ne passe pas par grep) – MrPoPoPolski

+1

@MrPoPoPolski Vous devez utiliser 'var = $ (commande)' à la place. Aussi, vous voudrez placer la variable entre guillemets dans votre commande 'grep' – Aaron

0

Je viens réécrit mon code à nouveau et maintenant il suffit d'utiliser ce qui suit et il fonctionne très bien

wget -O - -o /dev/null http://192.168.50.154/details.xml | sed -n 's:.*<Health>\(.*\)</Health>.*:\1:p'