我正在尝试使用db
value
元素的xmllint
属性
我的XPath查询需要导航到正确的dbtype,我希望将其存储在环境变量
中没有环境变量(硬编码),此命令有效
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
是一个变量,用于将shell参数的值作为"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 :(得分:1)
正如我刚刚发现的那样,您需要在单引号(')之间设置环境变量。
因此,以下方法应该起作用:
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'
答案 1 :(得分: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
我不太关心如何使值占位符使用$符号,我可能会回来并最终编辑它。
编辑:这是一个带$的,但你需要用:
来逃避它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'