共有ホスティング サーバーの httpd.conf ファイルがあり、すべての仮想ホストを vps に移行するタスクがあります。awk を使用して、特定のサイトの仮想ホスト エントリのブロックを抽出します。そのエントリを変数に格納します。しかし、変数の出力をエコーしてvpsサーバーのhttpd.confを追加すると、次のようなエラーが発生します
bash: コマンド置換: 1 行目: 予期しないトークン付近で構文エラーが発生しましたnewline'
bash: command substitution: line 1:
echo '
複数の行を持つ変数をエコーすることにより、単純なテキストファイルを追加する正確な方法を誰かが教えてくれますか?
私の予想スクリプトは次のとおりです。
#!/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" root@$remote_ip `echo $remote_command >> /etc/httpd/conf/httpd.conf`
expect "*assword: "
send "redhat\r"
interact
変数「remote_command」には、仮想ホスト エントリのパターンが含まれます。printf を使用しましたが、それでも同じ問題が存在します。–</p>
私の remote_command には次の値が含まれています
<VirtualHost>
DirectoryIndex index.php
</VirtualHost>
それでも同じエラーが発生します。引用符 "" を使用しましたが、複数行ではなく単一行で機能しました。
私のメインスクリプト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" root@$remote_ip `echo $remote_command >> /etc/httpd/conf/httpd.conf`
expect "*assword: "
send "redhat\r"
interact
しかし、それは機能していません。私が使用しているアプローチは完全に間違っている可能性があります。私の主な関心事は、共有 httpd サーバー内の特定のサイトに関連する仮想ホスト ブロックのすべての行を抽出し、それをリモート vps の httpd conf ファイルに転送することです。他の方法を提案していただければ幸いです。