То, что вы показываете, ed
используется вместе со сценарием редактирования.
Сценарий редактирования (последовательность ed
команд )передается в ed
как здесь -документ. Здесь -документ представляет собой часть возможно многострочного -текста , перенаправленного на стандартный ввод утилиты. Документ здесь -— это то, что находится между первым и последним маркерами END
. \
перед первым маркером END
означает, что документ заключен в кавычки, а это означает, что оболочка не будет пытаться раскрывать в нем переменные и т. д. Его также можно было записать как <<'END'
. В этом конкретном случае \
можно удалить, так как сценарий редактирования не содержит ничего для расширения оболочки.
Это распространенный способ использования ed
для более простого не -интерактивного редактирования, хотя ed
следует использовать с опцией -s
при таком использовании.
Команда эквивалентна использованию sed
с
sed '10,20/^/#/' /etc/passwd
(Сценарий ed
внесет изменения в файл, а затем отобразит файл в терминале перед выходом без сохранения изменений, что более или менее то, что делает вышеприведенный скрипт sed
. по строке -по -по строке ).
Это не хороший способ редактирования /etc/passwd
файла, (которого скрипт ed
на самом деле не делает, к счастью, поскольку он не сохраняет свои изменения ). Для этого следует использовать такие инструменты, как vipw
, или специальные команды, сделанные для изменения этого файла (, такие как useradd
и т. д. ). Это связано с тем, что файл во многих системах Unix должен быть синхронизирован с одним или несколькими другими файлами или базами данных, а его редактирование требует обновления и их (, что, например. vipw
делает автоматически ).
Только что распаковал m4 -1.4.17 здесь (Fedora 31; ваш latest
может быть другой версией... но, похоже, он датирован 2013 годом ). Файл-нарушитель находится там (вbuild-aux/snippet
). В комплект входит скрипт под названием bootstrap
, но он, по-видимому, нужен только для исходников прямо из системы контроля версий.
Традиционный ./configure; make
танец идет хорошо, но терпит неудачу после компиляции кучи вещей с:
freadahead.c: In function 'freadahead':
freadahead.c:91:3: error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
Простой поиск «GNU m4 FreeBSD» приводит к FreshPorts , в руководстве FreeBSD m4 говорится о -g
опции для активации совместимости с GNU m4. Почему их недостаточно? Предположительно, любая исправленная версия, которую несет FreshPorts, является лучшей отправной точкой (, если они цивилизованны и несут исходные коды и отдельные исправления, портирование исправлений на другую версию менее трудоемко, чем отладка этого беспорядка самостоятельно ).