gpt4 book ai didi

linux - 如何使用expect替换远程主机上的IP地址

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:18 25 4
gpt4 key购买 nike

我编写了以下expect脚本来替换远程Linux机器上的IP地址

我使用 Perl One Linear 来完成这项任务

我收到有关无法读取“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'

当您不引用此处文档标记时,shell 会在此处文档内插入变量引用,例如 $ENV。在你的例子中, ENV='$HOME/.kshrc' 这样 Perl 就不会看到 $ENV{OLD} 而是看到 $HOME/.kshrc{OLD} ,这显然是错误的。

关于linux - 如何使用expect替换远程主机上的IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18041324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com