Использование EOF для создания шаблонов bash
Я пытаюсь создать простой скрипт, который будет генерировать файлы в /etc/apache2/sites-available
каталог с помощью цикла for, и заставить его сделать это с помощью шаблона в моем скрипте. Вот как выглядит фрагмент моего скрипта:
cat <<EOF > /etc/apache2/sites-available/${VHOST}.com.conf
<VirtualHost *:80>
ServerName ${VHOST}.com
ServerAlias www.${VHOST}.com
ServerAdmin xxxxxx@xxxxxx.com
DocumentRoot /var/www/${VHOST}.com
ErrorLog ${APACHE_LOG_DIR}/${VHOST}_error.log
CustomLog ${APACHE_LOG_DIR}/${VHOST}_access.log combined
Options -Indexes
</VirtualHost>
EOF
ПРИМЕЧАНИЕ: ${VHOST} - это просто значение, указанное в цикле my for.
Результат, которого я пытаюсь достичь, заключается в том, что вывод шаблона будет отправлен в файл ${VHOST}.com.conf
в каталоге сайтов.
Мой фрагмент кода выше не работает, и я получаю следующие ошибки:
./vhost.sh: line 21: warning: here-document at line 6 delimited by end-of-file (wanted `EOF')
./vhost.sh: line 21: syntax error near unexpected token `newline'
./vhost.sh: line 21: `<<-EOF <VirtualHost *:80>'
ОБНОВИТЬ:
Я последовал предложению @PerlDuck, обновив файл следующим образом
cat > /etc/apache2/sites-available/${VHOST}.com.conf <<-EOF
<VirtualHost *:80>
ServerName ${VHOST}.com
ServerAlias www.${VHOST}.com
ServerAdmin hunter@prepaidmeters.com
DocumentRoot /var/www/${VHOST}.com
ErrorLog ${APACHE_LOG_DIR}/${VHOST}_error.log
CustomLog ${APACHE_LOG_DIR}/${VHOST}_access.log combined
Options -Indexes
</VirtualHost>
Попытка cat > /etc/apache2/sites-available/${VHOST}.com.conf <<- "EOF"
тоже не сработало. Оба выдают одну и ту же ошибку.
./vhost.sh: line 22: warning: here-document at line 6 delimited by end-of-file (wanted `EOF')
./vhost.sh: line 23: syntax error: unexpected end of file
1 ответ
@PerlDuck решил мою проблему для меня. Это просто случай нежелательного пустого пространства. Этот дополнительный пробел после последнего EOF предотвращает завершение heredoc. Таким образом производя ошибку
./vhost.sh: line 22: warning: here-document at line 6 delimited by end-of-file (wanted `EOF')
./vhost.sh: line 23: syntax error: unexpected end of file
Помните детей! Пробел, пробел, пробел!