2012-11-02 180 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

相關問題