簡體   English   中英

如何使用Expect替換遠程主機上的IP地址

[英]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"
  • 我很樂意在ksh腳本下獲得任何其他解決方案

在您使用它的行中引用“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM