0

我为执行一些 xmlstarlet 命令的 Windows 创建了一个批处理文件。我想把它写成 .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。不知道问题出在哪里?有人可以帮忙吗?

4

1 回答 1

0

bash 的引用规则(那是你 mac 上的 shell,对吗?)与 cmd.exe(Windows shell)不同,特别是 cmd.exe 被视为'普通字符,而 bash 它是一个引用字符,所以它不是'没有传递给程序。因此,在 bash 中,您还需要引用's :

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 中工作的优势。

于 2012-11-03T08:51:55.360 回答