Остановить выполнение, когда что-то записывается на stderr

Из раздела Здесь документы man bash

Формат документов здесь:

  < <[-] слово 
здесь-документ 
разделитель 
 

Не выполняется расширение параметров и переменных, подстановка команд , арифметическое раскрытие или раскрытие имени пути { {1}} на слово. Если какие-либо символы в слове заключены в кавычки, разделитель является результатом удаления кавычек в слове, и строки в здесь-документе не расширяются. Если слово не заключено в кавычки, все строки здесь-документа подвергаются расширению параметров, замене команды и арифметическому расширению, последовательность символов \ будет игнорируется, а \ необходимо использовать для заключения в кавычки символов \, $ и `.

Поскольку в вашем примере MAKE не заключен в кавычки, \ игнорируется, а $ @ расширяется (до предположительно пустого списка параметров).

Решение заключается в цитировании (любой части) маркера, например

cat <<\MAKE >> /etc/apache2/sites-available/Makefile1

или

cat <<"MAKE" >> /etc/apache2/sites-available/Makefile1

или для обеспечения необходимых экранирований, например \\ для продолжения линий и \ $ @ для $ @

1
09.03.2019, 14:52
0 ответов

Теги

Похожие вопросы