2012-11-02 146 views
0

我为windows创建了一个批处理文件,它执行一些xmlstarlet命令。我想把它写成.sh文件,以便我可以在mac上运行它。问题是..有些命令在Windows中工作正常,但不是在Mac中。它也没有显示任何错误。例如。xmlstarlet在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。我不知道问题在哪里? 有人可以帮忙吗?

回答

0

bash的引用规则(这是你的mac上的shell,对吗?)与cmd.exe(Windows shell)不同,特别是,cmd.exe将'当作普通字符处理,而对其进行打击则是引用字符,所以它不会传递给程序。在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也是如此。

+0

谢谢你说的对。报价规则是不同的。 'xml ed -L - d“//intent-filter//category[@android:name="android.intent.category.LAUNCHER”]“my_folder \ AndroidManifest.xml'为我工作。 – LincyTonita

相关问题