在期望脚本中,我可以设置任何命令或字符以在远程机器上运行它,但可悲的是期望不能发送与期望脚本中定义的相同的字符
例如
我想从期望脚本运行这一行,以便将 IP 地址从10.10.10.10更改 为1.1.1.1
expect # {send "perl -i -pe 's/\Q10.10.10.10\E/1.1.1.1/' /etc/hosts\r"}
但是当我运行期望屏幕时,实际上我看到控制台上运行着这条线:
[root@localhost ~]# perl -i -pe 's/Q10.10.10.10E/1.1.1.1/' /etc/hosts
注意 Q 和 E 之前的反斜杠消失了
所以我想知道如何从期望脚本中逃脱这些字符?
所以期望将在控制台上运行相同的行,如下所示
[root@localhost ~]# perl -i -pe 's/\Q10.10.10.10\E/1.1.1.1/' /etc/hosts
- REMARK 在反斜杠之前设置一个反斜杠“\”没有帮助!!!
我的脚本:
#!/bin/ksh
#
expect=`cat << EOF
set timeout -1
spawn ssh 192.9.200.10
expect {
")?" { send "yes\r" ; exp_continue }
word: {send secret1\r}
}
expect # {send "perl -i -pe 's/\\Q10.10.10.10\\E/1.1.1.1/' /etc/hosts\r"}
expect # {send exit\r}
expect eof
EOF`
expect -c "$expect"
结果(在我运行我的脚本之后:)
spawn ssh 192.9.200.10
root@'192.9.200.10 s password:
Last login: Sun Aug 4 22:46:53 2013 from 192.9.200.10
[root@localhost ~]# perl -i -pe 's/Q10.10.10.10E/1.1.1.1/' /etc/hosts
[root@localhost ~]# exit
logout
Connection to 192.9.200.10 closed.