2017-01-22 2 views
0

некоторые основные функции с целью извлечения XML вар по XPath:оболочка «Нет такого файла или каталога» на результат переменной выполнения

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/бен/xmllint --nocdata --xpath '// имя пользователя/текст()' /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

Точно. Котировки делают это одним словом для оболочки. – reinierpost

+0

Цитата ('echo '$ (...)" ') будет исправлять проблему с одной строкой, но она по-прежнему избыточна (и в случае возврата новых строк на выходе, lossy), чтобы захватить вывод команды только для используйте его в качестве единственного аргумента для 'echo'. – chepner

Смежные вопросы