Я работаю с файловыми файлами GNU в Windows на своей работе и стараюсь учиться, когда я иду. Рецепт линия, которая дает мне так много проблем являетсяПочему мои цитаты исчезают? (GNU make/sh)
$(SED) -n "/Format ID $(def_format_id)/,/End Format ID $(def_format_id)/ p" "$(def_format_altsec_header)" > "$(def_format_file)"
которая не для C:/GNU1_06/bin/sed: -e expression #1, char 7: unterminated address regex
.
Чтобы попытаться понять поведение, с которым я столкнулся в течение последних двух часов, я сменил его на простую команду, чтобы заставить sed запускать и останавливаться, чтобы я мог посмотреть, что именно происходит с процессом Process Исследователь:
$(SED) -e s/blah//
ProcExp показывает, что make непосредственно вызывает sed с ожидаемой командной строкой. Однако, если вы указываете один аргумент, make вызывает ТОЧНО ту же самую вещь (никаких кавычек, которые можно найти в командной строке).
Все становится странно, когда вы используете двойные кавычки. Make invokes C:/GNU1_06/bin/sh.exe -c "C:/GNU1_06/bin/sed -e \"s/blah//\""
Пока все хорошо, но затем sh вызывает C:\GNU1_06\bin\sed.exe -e s/blah//
как будто скрытых цитат никогда не было.
Что именно происходит здесь? Почему мои кавычки исчезают в преисподней, прежде чем sed когда-либо будет работать?
ОБНОВЛЕНИЕ: Это, по-видимому, связано с тем, что $ (SED) является полностью заданным путем. Такое поведение не наблюдается, когда sed.exe используется один (и ProcExp доказывает, что использует ту же копию sed, что и полностью заданный путь).
Эта проблема воспроизводит в минимальной Makefile
.PHONY: all
all:
C:/gnu1_06/bin/sed.exe -n "/Format ID 01010101/,/End Format ID 01010101/ p" "./FORMAT/BIGHILO/AC/99/sff_altsec_01_data.h"
Можете ли вы включить вывод, который вы получаете при запуске? Кроме того, если вы используете Cygwin, Process Explorer может не показывать вам аргументы, используемые утилитами Cygwin. –
Точная ошибка sed для первоначального отказа (первый код): C:/GNU1_06/bin/sed: -e выражение # 1, char 7: unterminated address regex –
Можете ли вы добавить вывод make также, где он показывает команда, которую он выполняет? –