Как оценить текстовые строки, предоставляемые sed / grep / what? - PullRequest
0 голосов
/ 23 декабря 2010

Это для программирования оболочки UNIX. Он должен поддерживаться несколькими платформами UNIX, включая Solaris, Linux и AIX.

У меня есть такой сценарий - я должен прочитать из текстового файла строку, которая может содержать или не содержать переменную среды, которая может или не может быть определена. Например:

<foo.bar> This error code was found: $(error_code)

У меня есть следующий код:

statement=$(sed -n $1'p' $messagefile)
echo $echo_flag $statement

$ 1 = номер строки, предоставленной этой конкретной функции / скрипту.
$ messagefile = имя файла журнала.
$ echo_flag = "-e" в Linux, иначе пусто.
$ (код_ошибки) = 42.

Вместо того чтобы получать это при запуске:

<foo.bar> This error code was found: 42

Я все еще получаю это:

<foo.bar> This error code was found: $(error_code)

Как именно я могу сказать сценарию оболочки, что значение оператора должно оцениваться дальше того, что сделал sed?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

К сожалению, входной текст использует $ (error_code) в качестве синтаксиса, потому что это похоже на подстановку процесса в оболочку.«eval» ближе к тому, что вы хотите, но это также и угроза безопасности для ввода контролируемого пользователем ввода и его непосредственного выполнения.

Найден этот код ошибки: rm -rf /

Чтовам нужно будет проанализировать строку ввода для ожидаемого синтаксиса и самостоятельно обработать токен «error_code», проверить наличие встроенного shellvar, распечатать измененный вывод и т. д.

0 голосов
/ 23 декабря 2010

Я не уверен, что понимаю, о чем вы спрашиваете, но изменил бы команду echo на eval echo $echo_flag $statement и делайте, что хотите?

...