2017-12-22 30 views
1

私は私のXPathクエリは、私は環境がなければ、環境変数xmllintに渡されるコマンドに環境変数を渡す方法は?

に格納したい、正しいDBTYPEにナビゲートする必要がxmllint

を使用してXMLファイルからdb要素のvalue属性を抽出しようとしています変数(ハードコードされた)、このコマンドは

echo 'cat //rdbmsinfo/dbtype[@value="sqlserver"]/db/@value' | xmllint --shell "config.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g' 

に動作します私は、以下のコマンドをしようとしています:

echo 'cat //rdbmsinfo/dbtype[@value="$ldb_source_typ"]/db/@value' | xmllint --shell "config.xml" | grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g' 

ldb_source_typは、シェルパラメータの値を"sqlserver"として取得する変数です。しかし、上記の構文は出力を与えていません。

なぜこれが機能しないのですか?どのように修正できますか?

私のconfig.xmlのXMLは次のようになります。

<?xml version="1.0"?> 
<rdbmsinfo> 
    <dbtype value="sqlserver"> 
    <db value="sqlsrv1"> 
     <dbhostip>192.168.0.1</dbhostip> 
     <dbhostportno>2000</dbhostportno> 
     <dbusername>sample</dbusername> 
     <dbpassword>sample</dbpassword> 
    </db> 
    <db value="sqlsrv2"> 
     <dbhostip>192.168.0.2</dbhostip> 
     <dbhostportno>2000</dbhostportno> 
     <dbusername>sample</dbusername> 
     <dbpassword>sample</dbpassword> 
    </db> 
    </dbtype> 
    <dbtype value="postgresql"> 
    <db value="postsql1"> 
    </db> 
    </dbtype> 
</rdbmsinfo> 

答えて

0

私は次のようにこれを達成することができました:

次の出力生成
echo "cat //rdbmsinfo/dbtype[@value="ldb_source_type"]/db/@value" | sed 's/ldb_source_type/"'$SQLSERVER'"/g' | xmllint --shell config.xml| grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g' 

sqlsrv1 
------- 
sqlsrv2 

を値のプレースホルダが$記号を使用する方法を理解するのに十分気にしなかった、私は戻ってきて、それを編集したntually。

編集:ここでは$との1ですが、あなたがそれをエスケープする必要があります:

echo "cat //rdbmsinfo/dbtype[@value="\$ldb_source_type"]/db/@value" | sed 's/\$ldb_source_type/"'$SQLSERVER'"/g'| xmllint --shell config.xml| grep -v ">" | cut -f 2 -d "=" | tr -d \ | sed 's/"//g' 
関連する問題