2017-10-04 4 views
0

コードを書き直す際にこのエラーが発生しました。変数で競合するgrepとwget

#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"<") 

しかし、私は(私は新しいサーバーで新しいファイルを保存することができないため)変数に直接それを保存しようとすると、それは私に次のエラーがスローされます。予想通り

このコードは動作します:

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

これは、 "新しい" コードです:

#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

:私はあなたが必要とするすべてであるあなたは、あなたがそれ以外の場合は掲載コードを越えた変数rohxmlhealthのためのいくつかの使用を持っていると仮定していますコマンドの出力を変数に保存するのではなく、grepコマンドラインを使用します。それをしないでください。それは機能のためのものです。書かれているように、ワイルドカード展開、グロブ、単語分割などのためにコマンドをシェルに公開しているときなど、特定のディレクトリなどから実行すると厄介な驚きにさらされます。 –

+0

"SOLVED"をタイトル。あなたの質問が答えられたことを示すには、答えを受け入れます(通常、あなたも同様にそれをupvoteしたいでしょう)。既存の回答で問題が解決しなかった場合は、自分で投稿して回答を受け入れることができます。 –

答えて

0

を働いています。試してみてください:

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

質問がある場合は質問してください。あなたは変数にwgetコマンドラインを格納し、それを上で実行している知っています

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

あなたは文字列を格納し

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

$ rohxml変数には、コマンドの出力ではありません。バッククォートを使用して出力を保存します。

さらに、XMLから情報を抽出するには、XML対応ツールを使用します。簡単なクエリでは、xmllintは十分に機能するはずです。

+0

私は を持っています。ABFRAGE = "' wget -q -O- http:// 192.168.50.154/details.xml' " 今はコマンドを正確に解析していません(私は、 grepを使わないでください) – MrPoPoPolski

+1

@MrPoPoPolski代わりに 'var = $(command)'を使う必要があります。 'grep'コマンドで二重引用符で囲むこともできます – Aaron

0

私はあなたがどのようにシェルの作品のいくつかの基本的な誤解を持っているだけで、再び私のコードを書き直しましたし、今ちょうど次を使用して、それは細かい

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