以下是我想要作为 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
),而不是调整您的代码,直到它正常工作为止。您的代码中有相当多的语法错误。