[英]how to replace IP address on remote host using expect
我編寫以下期望腳本以替換遠程Linux機器上的IP地址
我將perl用於此任務
我收到有關無法讀取“ HOME”的錯誤:沒有這樣的變量,
請在我的期望腳本中建議我需要更改的內容,以便更改請求的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
root@12.219.102.43'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"
在您使用它的行中引用“ EOF”(此處為文檔標記)
expect_transfer=`cat << EOF
進入
expect_transfer=`cat << \EOF
要么
expect_transfer=`cat << 'EOF'
當您不引用here文檔標記時,shell會在here文檔內插變量引用,例如$ ENV。 在您的情況下,ENV ='$ HOME / .kshrc',這樣Perl不會看到$ ENV {OLD}而是$ HOME / .kshrc {OLD},這顯然是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.