xmlstarlet在mac中无法正常工作

时间:2012-11-02 13:53:07

标签: libxml2 libxslt xmlstarlet

我为windows创建了一个批处理文件,用于执行一些xmlstarlet命令。我想把它写成.sh文件,以便我可以在mac上运行它。问题是..有些命令在Windows中工作正常,但在mac中没有。它也没有显示任何错误。例如

**xml ed -L -d //intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folder\AndroidManifest.xml**

在windows中,上面的命令会删除提到的xml标记。它在mac中没有任何作用。 但命令

**xml sel -t -m //manifest -v //manifest/@package mim_apk_proj\AndroidManifest.xml**

在mac和windows中都运行正常。 我已经安装了xml工具。检查/ usr / local / bin。它有libxslt.dylib和libxml2.dylib。我不知道问题在哪里? 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

bash的引用规则(这是你的mac上的shell,对吗?)与cmd.exe(Windows shell)不同,特别是cmd.exe将'视为普通字符而bash它是一个引用字符,因此它不会传递给程序。因此,在bash中你需要引用'

xml ed -L -d //intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folder\AndroidManifest.xml
# becomes
xml ed -L -d "//intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folder\AndroidManifest.xml"
# or, since XPath treats both kinds of quotes identically you can also use
xml ed -L -d '//intent-filter//category[@android:name="android.intent.category.LAUNCHER"] my_folder\AndroidManifest.xml'

第二个修复更安全,因为它还可以防止bash在使用$时进行任何变量扩展,但第一个修复也具有在Windows中工作的优势。