Я попытался поместить следующее в свой Make-файл:
@if [ $(DEMO) -eq 0 ]; then \
cat sys.conf | sed -e "s#^public_demo[\s=].*$#public_demo=0#" >sys.conf.temp; \
else \
cat sys.conf | sed -e "s#^public_demo[\s=].*$#public_demo=1#" >sys.conf.temp; \
fi
но когда я работаю, делают, я получаю следующую ошибку:
sed: -e expression #1, char 30: unterminated `s' command
Если я выполняю точные строки, которые содержат sed
в консоли они ведут себя правильно.
Почему я получаю эту ошибку и как проблема может быть решена?
Это может быть знак $ в подстановке, который make интерпретирует как переменную. Попробуйте использовать два из них, например . * $$ # public_demo . Затем make расширит это до одного $.
РЕДАКТИРОВАТЬ: Это была только половина ответа. Как ответил Кристис: другая часть заключается в том, что нужно использовать одинарные кавычки, чтобы bash также не расширял знак $.
Я предлагаю вам использовать одинарные кавычки вместо двойных, $
может быть обработан make как специальный символ перед запуском sed:
cat sys.conf | sed -e 's#^public_demo[\s=].*$#public_demo=0#' >sys.conf.temp;
Используйте что-то другое, кроме #
, для разделения частей.