
expect
リモートLinuxシステムのIPアドレスを置き換えるために、次のスクリプトを作成しました。
perl
これを行うには1行を使用します。
'HOME'を読み取れませんでした:対応する変数がありませんというエラーが発生します。
expect
要求されたIPを変更するには、スクリプトで何を変更する必要があるかを教えてください。
#!/bin/ksh
expect_transfer=`cat << EOF
set timeout -1
spawn ssh 12.219.102.43
expect {
")?" { send "yes\r" ; exp_continue }
word: {send pass123\r}
}
expect # {send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$ENV{OLD}\E/$1$ENV{NEW}$2/' /etc/hosts\r"}
expect # {send exit\r}
expect eof
EOF`
expect -c "$expect_transfer"
結果:
spawn ssh 12.219.102.43
[email protected]'s password:
Last login: Sun Aug 4 12:29:25 2013 from 12.219.102.43
[root@localhost ~]# can't read "HOME": no such variable
while executing
"send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$HOME/.kshrc{OLD}\E/$HOME/.kshrc{NEW}/' /etc/hosts\r""
invoked from within
"expect # {send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$HOME/.kshrc{OLD}\E/$HOME/.kshrc{NEW}/' /etc/hosts"
- kshスクリプトから別の解決策を手に入れたらうれしいです。
答え1
明らかに次に$ENV
拡張されます。$HOME/.kshrc
send "export OLD=10.10.10.10 ; export NEW=1.1.1.1 ; perl -i -pe 's/\Q$HOME/.kshrc{OLD}\E/$HOME/.kshrc{NEW}/' /etc/hosts\r
あなたはできます
Perl行で$ OLDと$ NEWを試してみてください。
期待を放棄し、代わりに通常のSSHを使用してください。
ssh [email protected] -- sed -i s/$OLD/$NEW/ /etc/hosts
正しいキー設定を使用すると、パスワードも必要ありません。