2015-12-22 4 views
1

Я пытаюсь сделать переменную командной XMLStarlet, которая включает в себя аргументы:Двойная кавычка в команде в качестве переменной в Баш

WARNING=$(xmlstarlet ed --inplace -u "'"/programs/program/log/@level"'" -v 4 ${FILE}) 

К сожалению, без двойных кавычек или одинарные кавычки даже XMLStarlet не принимает/см элемент.

Любая помощь включать цитаты (ы) в качестве вывода в команде будет приветствоваться :)

спасибо. AL.

+0

Вы пытались использовать символ эвакуации? например, '\ '/ programs/program/log/@ level \'' – Rao

+0

все еще не успевают. – user4711416

+0

++ xmlstarlet ed --inplace -u/programs/program/log/@ level -v 4 ./file.xml + BMWARNING = + '[' -z --info ']' + case $ {1 } в – user4711416

ответ

1

Требование о том, что в этом выражении необходимы буквальные кавычки для XMLStarlet для поиска нужного элемента, является ложным.

Скорее всего, вы запускаете на месте команды редактирования, захватывая стандартный вывод имеет смысл только в контексте выберите команды (или обычного редактирования с заменой текста отправленного на стандартный вывод); для редактирования на месте, stdout будет пустым.

Если ваша цель состоит в том, чтобы захватить поток ошибок, связанные с операцией редактирования на месте:

warnings=$(xmlstarlet ed --inplace -u "/programs/program/log/@level" -v 4 "$file" 2>&1) 

... скопирует STDERR на стандартный вывод, гарантируя, что это улавливается.


Тем не менее, если ваша цель захватить warnings, чтобы проверить на успех, не полагаться на глядя на stderr; вместо этого проверьте статус выхода:

if warnings=$(xmlstarlet ed --inplace ... 2>&1); then 
    echo "Update succeeded" >&2 
else 
    echo "Update failed: $warnings" >&2 
fi 
+0

Как и при выполнении команды, элемент правильно найден: xmlstarlet ed --inplace -u "/ programs/program/log/@ level" -v 4 file.xml – user4711416

+0

@ user4711416, эти цитаты являются синтаксическими, а не буквальными; они потребляются оболочкой, а не отправляются на XMLStarlet. –

+0

@ user4711416, ... однако, когда вы помещаете '' '' 'вокруг двойной кавычки, вы сделали ее буквальной, то есть ее отправили в XMLStarlet, то есть ее содержимое анализируется как строка XPath, а не выражение. –

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

  • Нет связанных вопросов^_^