2013-08-04 59 views
0

我写了下面的期待,以取代远程Linux机器上的IP地址如何远程主机上使用预计更换IP地址

我用perl的一个线性这个任务

我得到的错误脚本关于无法读取“首页”:没有这样的变量,

请指教我需要改变我的期望脚本,所以我会改变请求的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 
    [[email protected] ~]# 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脚本
+0

'user @ 12.219.102.43'的默认shell是什么?仅仅是ksh,还是bash? – anishsane

+0

您也在bash下标记了该问题。你可以使用基于bash的解决方案吗?或者你真的想要ksh解决方案(在这种情况下,你应该不用标记'bash')? – anishsane

+0

我更喜欢ksh,因为我的脚本在ksh中构建 – maihabunash

回答

0

报价的“EOF”(这里的文件标记)任何其他解决方案,你使用它,也就是改变

expect_transfer=`cat << EOF 

expect_transfer=`cat << \EOF 

expect_transfer=`cat << 'EOF' 

如果不引用在这里记录标记,外壳内插在这里的文件里面,比如$ ENV变量引用。在你的情况下,ENV ='$ HOME/.kshrc',这样Perl就不会看到$ ENV {OLD},而是$ HOME/.kshrc {OLD},这显然是错误的。

相关问题