2016-04-06 2 views
1

У меня возникла проблема с попыткой захватить вывод команды sed в переменной make-файла.

JS_SRC:=$(shell sed -n '[email protected]*src="\([^"]*\.js\).*@\[email protected]' index.html)

Который дает мне

sed: -e expression #1, char 34: unknown option to s' `

Я пытался бежать вещи и тому подобное, но я всегда давал эту ошибку. Все варианты экранирования, которые я выполнил, работают нормально с терминала. Как make-файл вызывает команду оболочки ?. /usr/bin/sh -c "cmd?" или что-то другое ?.

Somethings интерполируется, но я понятия не имею, что.

ответ

1

JS_SRC:=$(shell sed -n "s/.*src=\"\\([^\"]*\\.js\\).*/\\1/p" index.html)

Появляется на работу. Я понял это через запуск make -d и просмотр процесса, который он создавал.

Что было непонятным в том, что он делал разные вещи с ' против " в аргументе sed. " работает с /bin/sh -c "args", поэтому я смог настроить экранирование, чтобы получить то, что мне нужно было там появиться. Использование ', похоже, вызывает sed напрямую.

Существует целая куча экранирования, которую я считаю ненужной (мне не нужно интерполировать переменные в выражении sed, но она отправляет ее в оболочку, которую я понимаю, поэтому это нужно будет сделать! :)

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