我为windows创建了一个批处理文件,用于执行一些xmlstarlet命令。我想把它写成.sh文件,这样我就可以在mac上运行它了。问题是…有些命令在windows中运行良好,但在mac中运行不好。它也没有显示任何错误。例如
**xml ed -L -d //intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folderAndroidManifest.xml**
在windows中,上面的命令会删除上面提到的xml标记。但它在mac上什么都不做。但是命令
**xml sel -t -m //manifest -v //manifest/@package mim_apk_projAndroidManifest.xml**
在mac和windows上都运行良好。我已经安装了xml工具。已选中/usr/local/bin。它有libxslt.dylib和libxml2.dylib。我不知道问题出在哪里?有人能帮忙吗?
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_folderAndroidManifest.xml
# becomes
xml ed -L -d "//intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folderAndroidManifest.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_folderAndroidManifest.xml'
第二个修复程序更安全,因为如果使用$
,它还可以防止bash进行任何变量扩展,但第一个修复程序也有在Windows中工作的优势。