2017-01-22 13 views
0

與目標由XPath來提取XML變種的一些基本功能:外殼可變執行結果 「沒有這樣的文件或目錄」

function get_xml_value_from_config_dir { 
local src_root=$1 
local xpath_expr="//$2/text()" 
local path_to_local="$src_root/app/etc/local.xml" 
if [ ! -f $path_to_local ]; then echo "Config file not found: $path_to_local"; exit; fi; 
echo $("$xmllint --nocdata --xpath '$xpath_expr' $path_to_local") 
} 

## and then 
src_usr=$(get_xml_value_from_config_dir $src_dir username) 

給我

線34:在/ usr/bin中/ xmllint --nocdata --xpath'// username/text()'/tmp/bin/app/etc/local.xml:沒有這樣的文件或目錄

爲什麼? (/usr/bin/xmllint存在以及/tmp/bin/app/etc/local.xml

+0

爲什麼使用echo $(「」)'?你不想只是回聲或跑? –

+0

我該如何返回此字符串的執行結果? –

+0

我不認爲這是你的問題。 'xmllint'是一個程序?爲什麼你將它用作字符串中的變量? '$ xmllint' –

回答

1

它告訴你它無法找到名爲

/usr/bin/xmllint --nocdata --xpath '//username/text()' /tmp/bin/app/etc/local.xml 

的文件或目錄這的確是不太可能你的系統中存在。 替換

echo $("$xmllint --nocdata --xpath '$xpath_expr' $path_to_local") 

echo $($xmllint --nocdata --xpath "$xpath_expr" $path_to_local) 

順便提及,將把所有xmllint輸出在一行上;爲了避免這種情況,只需使用

xmllint --nocdata --xpath "$xpath_expr" $path_to_local 
+0

正是這個原因,非常感謝!所以'$(「...」)'試圖執行引號中給出的路徑? –

+0

正是。引號使它成爲shell的一個單詞。 – reinierpost

+0

引用('echo「$(...)」')可以解決一行問題,但它仍然是多餘的(並且在輸出中的換行符後面有損耗的情況下)來捕獲命令的輸出用它作爲'echo'的唯一參數。 – chepner

相關問題