如何将环境变量传递给传递给xmllint的命令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将环境变量传递给传递给xmllint的命令?相关的知识,希望对你有一定的参考价值。

我正在尝试使用db从xml文件中提取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>
答案

我能够通过以下方式实现这一目标:

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'

以上是关于如何将环境变量传递给传递给xmllint的命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何将环境变量传递给由 systemd 启动的服务

如何将环境变量传递给前端 Web 应用程序?

如何将环境变量传递给pytest

如何在传递 ShellCheck 时通过环境变量将 glob 传递给 shell 脚本

将主机环境变量传递给 dockerfile

无法将环境变量传递给 docker