以下是我想作为 bash 脚本的一部分运行的 python one-liner
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']"
Run Code Online (Sandbox Code Playgroud)
(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
Run Code Online (Sandbox Code Playgroud)
但是它无法运行。如果我使用 +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
Run Code Online (Sandbox Code Playgroud)
我认为这与转义 python 代码有关。我怎样才能正确地逃避它?
不需要将参数转义或移动到它自己的变量中。
但是,保持基本相同,以下对我有用:
#!/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
Run Code Online (Sandbox Code Playgroud)
/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>
Run Code Online (Sandbox Code Playgroud)
输出:
[u'1']
Run Code Online (Sandbox Code Playgroud)
请扔掉你的代码,只使用我的(调整后WS
)而不是调整你的,直到它工作。你那里有很多语法错误。
归档时间: |
|
查看次数: |
18537 次 |
最近记录: |