【问题标题】:xmlstarlet not working correct in macxmlstarlet 在 mac 中无法正常工作
【发布时间】:2012-11-02 13:53:06
【问题描述】:

我为执行一些 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。不知道问题出在哪里? 有人可以帮忙吗?

【问题讨论】:

    标签: libxml2 libxslt xmlstarlet


    【解决方案1】:

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

    【讨论】:

    • 谢谢,没错。引用规则不同。 xml ed -L -d "//intent-filter//category[@android:name="android.intent.category.LAUNCHER"]" my_folder\AndroidManifest.xml 为我工作。
    猜你喜欢
    • 2011-12-18
    • 2018-07-02
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多