2012-03-13 2 views
0

Есть ли способ предотвратить подстановку команд в сценарии оболочки?Запретить замену командной строки оболочки

Например, если сценарий содержит строку:

var=`echo foo` 

Я хотел бы способ получить `эхо Foo`. Не только замените команду foo.

Редактировать: Я пытаюсь сохранить эти команды для последующей эвакуляции. Плюс я не могу редактировать скрипт вручную; Мне нужны эти значения в программе на C/C++, и мне пришлось бы как-то разобрать сценарий, который убивает цель (именно этого я и хочу избежать: разбор сценария).

Edit # 2: Полная ситуация объясняется здесь: есть этот сценарий оболочки, который содержит кучу переменных, как это:

foo="bar" 
baz=`some_command` 

и т.д. Я хочу для каждой переменной для хранения правой части выражение (например, «bar» и «some_command»). Я должен сделать это из программы C/C++, поэтому я не могу вручную отредактировать скрипт (например, для добавления одинарных кавычек).

+0

Что вы пытаетесь сделать? Если вы хотите «защитить» строку для 'eval', это [не так уж просто] (http://mywiki.wooledge.org/BashFAQ/048). – l0b0

+0

Вы разбираете сценарий или нет? Вы говорите, что хотите получить '' 'echo foo \' 'из' var = \ 'echo foo \' ', который очень похож на синтаксис оболочки, а не на синтаксис C/C++. Является ли пользователь вводить команды в программе C/C++, которые должны выполняться в оболочке? – l0b0

+0

@ l0b0: Я ** не ** хочу разобрать сценарий (это длинный и болезненный путь). Итак, я думал о том, чтобы создать оболочку в качестве другого процесса и сделать там скрипт. Поэтому да, я ищу какой-то синтаксис/магия оболочки. Я упомянул программу C/C++, чтобы указать, что сценарий нельзя редактировать вручную. –

ответ

1

Вы должны поместить свою строку в одинарную цитату.

var='`echo foo`' 
+0

Забыл упомянуть, что я не могу отредактировать этот скрипт вручную. Я хочу получить эти значения в программе на C/C++, поэтому мне пришлось бы разбирать скрипт, чтобы найти, где поставить одиночные кавычки, чего я хотел избежать. –