在 Bash 脚本中运行 Python Oneliner

在 Bash 脚本中运行 Python Oneliner

以下是我想要作为 Bash 脚本的一部分运行的 Python 单行代码

python -c "from xml.dom.minidom import parse;dom = parse('/path/to/pom.xml');print [n.firstChild.data for n in dom.childNodes[0].childNodes if n.firstChild and n.tagName == 'version']"

(pom.xml 是 maven POM xml 文件)

我希望将命令的结果分配给变量MVN_VER

这是我的基本脚本:

WS="/path/to"
PY_GET_MVN_VERS="from xml.dom.minidom import parse;dom = parse(\'${WS}/pom.xml\')\;print [n.firstChild.data for n in dom.childNodes[0].childNodes if n.firstChild and n.tagName == \'version\']"

funcion test_mvn {

        MVN_VER=`python -c \"${PY_GET_MVN_VERS}\"`
        echo ${MVN_VERS}
}

test_mvn

但是它无法运行。如果我使用 +x 选项运行脚本,则会看到以下内容:

++ python -c '"from' xml.dom.minidom import 'parse;dom' = 'parse(\'\''/path/to/pom.xml\'\'')\;print' '[n.firstChild.data' for n in 'dom.childNodes[0].childNodes' if n.firstChild and n.tagName == '\'\''version\'\'']"'
  File "<string>", line 1
    "from

我认为这与转义 Python 代码有关。我该如何正确转义它?

答案1

无需转义或将参数移动到其自己的变量。

但是,保持基本相同,以下对我来说有效:

#!/usr/bin/env bash
WS="/Users/danielbeck/Desktop"
PY_GET_MVN_VERS="from xml.dom.minidom import parse;dom = parse('${WS}/pom.xml');print [n.firstChild.data for n in dom.childNodes[0].childNodes if n.firstChild and n.tagName == 'version']"
function test_mvn {
        MVN_VER=$( python -c "${PY_GET_MVN_VERS}" )
        echo ${MVN_VER}
}
test_mvn

/Users/danielbeck/Desktop/pom.xml是来自 Maven 文档的最小 POM 示例:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

输出:

[u'1']

请丢弃您的代码,直接使用我的代码(经过调整后WS),而不是调整您的代码,直到它正常工作为止。您的代码中有相当多的语法错误。

相关内容