У меня есть файл httpd.conf для общего хостингового сервера, и у меня есть задача перенести каждый виртуальный хост на vps. используя awk, я извлекаю блок записи виртуального хоста для определенного сайта. и сохраните эту запись в переменной. но когда я эхо из положить переменный для добавления httpd.conf на сервере VPS он дает ошибку, какecho несколько строк в файл
Баш: подстановки команды: Строка 1: ошибка синтаксиса около неожиданной лексемы newline' bash: command substitution: line 1:
эха "
Может кто-нибудь сказать точный способ добавления простого текстового файла путем эхо-переменной, имеющей несколько строк.
Мой ожидать сценарий выглядит следующим образом:
#!/usr/bin/expect
set remote_ip [lindex $argv 0]
set username [lindex $argv 1]
set remote_command [lindex $argv 2]
foreach {remote_ip username remote_command} $argv {break}
spawn ssh -o "StrictHostKeyChecking no" [email protected]$remote_ip `echo $remote_command >> /etc/httpd/conf/httpd.conf`
expect "*assword: "
send "redhat\r"
interact
и переменная «remote_command» содержит шаблон записи виртуального хоста. used printf, но все же такая же проблема существует. -
мой remote_command содержит следующие значения
<VirtualHost>
DirectoryIndex index.php
</VirtualHost>
он все еще дает такой же error.I используется «» кавычки, но он работал на одной линии, а не для нескольких линий.
Мой главный script.sh сценарий содержит строки
#!/bin/bash
some code .....
some code......
some code ......
echo "<VirtualHost $D_IPADDRESS>" > /opt/remotehttpd_conf
awk "p && /\/VirtualHost/{exit} /$SITENAME/{p=1}p" /opt/httpd.conf >> /opt/remotehttpd_conf
echo "</VirtualHost>" >> /opt/remotehttpd_conf
REMOTE_COMMANDS4=`cat /opt/remotehttpd_conf`
echo $REMOTE_COMMANDS4
./expect_remote_command_httpd.exp "$D_IPADDRESS" "$USERNAME" "$REMOTE_COMMANDS4"
some code .....
some code .....
когда эхо REMOTE_COMMANDS4 он работает нормально и дать мне выход, поэтому я использую expect_remote_command_httpd.exp для передачи выходного сигнала на удаленной машине
мой expect_remote_command_httpd. exp содержит
#!/usr/bin/expect
set remote_ip [lindex $argv 0]
set username [lindex $argv 1]
set remote_command [lindex $argv 2]
foreach {remote_ip username remote_command} $argv {break}
spawn ssh -o "StrictHostKeyChecking no" [email protected]$remote_ip `echo $remote_command >> /etc/httpd/conf/httpd.conf`
expect "*assword: "
send "redhat\r"
interact
но его не работает. Может быть, какой подход я использую, это совершенно неправильно. Моя главная задача состоит в том, чтобы извлечь все строки виртуального хост-блока, связанные с указанными сайтами на общем сервере httpd, и trnsfer его на httpd conf.sh удаленным vps http. Conf.I по достоинству оценят, если вы предложите любой другой способ.
Какой у вас код? Вероятно, некоторые незакрытые обратные или цитаты ... –