プロが教える店舗&オフィスのセキュリティ対策術

SolarisでshellにBashを使う環境で、リモートのルータに入り
コンフィグを操作するscriptを書きたいと思っています。

1.引数に与えられたファイルから値を読み、変数$POLにセットする。
2.expectでルータにSSHし、変数$POLに入っている値を設定する。
3.上記をファイルの行数分繰り返す。

上記を実現しようと以下の様に書いたのですが
expect内で変数が扱えません。
(ルータに$POLという文字列のまま送られてしまう)
--
#!/usr/bin/bash

HOST="192.168.0.100"

for list in `cat $1`
do

POL=$(echo $list | cut -d , -f 1)


/usr/local/bin/expect -c '
set timeout 5
spawn ssh -l cm01 $HOST
expect "password:"
send "hogehoge"

expect "router $ "
send "config firewall policy\r"
expect "router (policy) $ "
send "edit $POL\r"
send "set firewall on\r"
send "end\r"
send "exit\r"

'
done
--

色々と調べてみたのですが理由がわからず、お教えいただければ幸いです。

A 回答 (2件)

だよね.



理由が
/usr/local/bin/expect -c '
(中略)
'
なのは明らかなんだけど, どう直すかねぇ.

標準入力からコマンドを読み込ますことってできたっけ? できるなら heredoc が簡単だけど, できなかったらどうしよう. 最悪 expect 用のスクリプトを別ファイルに書けばいいのかな?
    • good
    • 0

ん? $POL は $POL のままで, $HOST は指定した値になってるのかな?

この回答への補足

書き忘れでした。
$HOSTも$POLもどちらも値が入らず変数名のままです。

補足日時:2012/11/29 22:14
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!