2013-12-09 43 views
2

我在shell腳本中使用xpath(如Mac OS X 10.9 usr/bin/xpath5.16中提供的)來解析XML文件中的某些值,該值非常適用。但是,它給了我一些我不想在腳本中看到的詳細輸出。我其實只是想將結果(屬性的內容)存儲在一個變量中。如何禁止over-verbose xpath-output?

content=$(xpath ../../AndroidManifest.xml /manifest/@android:versionCode) 
echo "$content" 

執行後,變量content確實包含屬性的內容,但也有一些詳細的輸出我想擺脫的。在這裏它是:

Found 1 nodes: 
-- NODE -- 

android:versionCode="38" 

注:「38」在輸出的端部從echo "$content"線始於其餘的xpath輸出。

回答

3

找到解決方案。只需追加2>/dev/null的命令:

content=$(xpath ../../AndroidManifest.xml /manifest/@android:versionCode 2>/dev/null) 

輸出:

android:versionCode="38" 
2

man xpath

-q 
    Be quiet. Output only errors (and no separator) on stderr. 

更好地利用xpath -q ...,而不是管道的所有標準錯誤的消息。這將確保實際的錯誤將繼續打印,但沒有其他狀態輸出/節點分隔符。

+2

我已經通過google搜索找到這個標誌,遺憾的是它並不適用於Mac OS X中 – ubuntudroid

0

-q對我不起作用。由於對STD-ERR的XPath utulity打印輸出外,只需將其重定向到/ dev/null的

xpath file.xml '/foo/bar/text()' 2>/dev/null 
+0

提供的XPath的版本看到我自己的迴應。 ;) – ubuntudroid