Устранение неполадок с ошибкой «неопределенная команда» - PullRequest
3 голосов
/ 01 ноября 2010

Я создаю скрипт , который, среди прочего, заменит шаблон в XML-файле на путь к папке.

Команда sed, которую я пытаюсь использовать,:

SEDCMD="s|PATHTOEXPORT|$2|"

, где $2 - параметр командной строки, в котором указан путь к папке.

Это позже называется:

sed -e $SEDCMD $FILTER > $TEMPFILTER

Однако,при выполнении команды я получаю сообщение об ошибке «неопределенная команда».

Как обойти это?Я попытался изменить символы, используемые для разделения регулярных выражений (с / до |).И я пытался (по-разному) цитировать параметр командной строки.

1 Ответ

5 голосов
/ 01 ноября 2010

Оболочка видит разбор содержимого $SEDCMD.Если вы используете это из сценария оболочки, включая Makefile, вы всегда должны защищать все ваши расширенные переменные двойными кавычками.Двойные кавычки заставят переменную интерполяцию, но защитят любой метасимвол оболочки от дальнейшей интерпретации.

sed -e "$SEDCMD" "$FILTER" > "$TEMPFILTER"

Я предполагаю, что $FILTER и $TEMPFILTER являются именами файлов?Я тоже процитировал их, на случай, если они содержат злые вещи, такие как пробел или другие метасимволы оболочки;странно, да, но это, как известно, случалось.Регулярно запускайте rename 's/\s+/_/g' для имен файлов, чтобы очистить их от пробелов, но для других вам придется использовать более осторожный подход;например, что делать со звездами, со знаками вопроса, со скобками и скобками и т. д.

Если вы добавите -x и / или -v в командную строку оболочки, вы получите некоторую отладку трассировки, котораяЯ думаю, вероятно, показал бы, где вы пошли не так здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...