К сожалению, вы были введены в заблуждение своим «очевидным» заключением Очевидно, что make каким-то образом пытается использовать sed раньше, чем HTML-код :) Это совсем не проблема. Внимательно просмотрите сообщение об ошибке:
sed: can't read : No such file or directory
Обратите внимание на can't read :
; там должно быть имя файла. Это должно сказать что-то вроде can't read foobar:
. Так ясно sed
пытается прочитать файл с именем пустой строки. Вот строка, которую вы используете:
sed -i '' -e '/href="./s/\.md/\.html/g' /project/docs/changelog.html
Очевидным виновником здесь является аргумент пустой строки для -i
. Страница man sed описывает параметр -i
следующим образом:
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
Обратите внимание, что (a) SUFFIX является необязательным, и (b) между аргументом и его параметром нет пробела. В вашем примере вы добавили пробел, который заставляет sed полагать, что SUFFIX не был предоставлен, и обрабатывать следующий аргумент (''
) как имя файла, с которым нужно работать.
Я не уверен, почему это работало, когда вы запускали его из командной строки: я должен предположить, что ваша версия командной строки не содержала пустую строку или в ней не было пробела между -i
и ''
.
Используйте одно из:
sed -i'' -e '/href="./s/\.md/\.html/g' $@
или
sed --in-place= -e '/href="./s/\.md/\.html/g' $@