【发布时间】:2013-08-05 03:59:20
【问题描述】:
我写了下面的expect脚本来替换远程linux机器上的IP地址
我使用 perl one linear 来完成这项任务
我收到关于 can't read "HOME": no such variable 的错误,
请告知我需要在我的期望脚本中更改什么,以便我更改请求的 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 脚本下获得任何其他解决方案
【问题讨论】:
-
user@12.219.102.43的默认 shell 是什么?是只有 ksh 还是 bash? -
您也已在 bash 下标记了该问题。您是否可以使用基于 bash 的解决方案,或者您严格需要 ksh 解决方案(在这种情况下,您应该取消标记
bash)? -
我更喜欢 ksh ,因为我的脚本是在 ksh 中构建的
-
我没有
ksh的经验...但是我会在这里尝试猜测...由于默认情况下 ssh 会将您登录到您的$HOME,因此您无需指定.kshrc的绝对路径,或将根目录的HOME硬编码为/root。或者,如果有帮助,请尝试使用ssh -t...
标签: linux perl bash ksh expect