防止Expect的变量替换远程shell命令

时间:2016-03-06 01:56:30

标签: variables scripting expect

我需要使用expect脚本运行此cmd:

:GWrite

但由于其中的2美元,它出错了。我该如何解决?我需要变量只对我发送cmd的设备可见。

以下是通过脚本在UBNT设备上更改密码的完整脚本(通过ssh工作,但因为$ 2而不是脚本):

    echo users.1.password=`grep %user% /etc/passwd | awk -F: '{print $2}'` >> /tmp/system.cfg.new

1 个答案:

答案 0 :(得分:0)

你必须用反斜杠逃避美元符号。

send "echo users.1.password=`grep $user /etc/passwd | awk -F: '{print \$2}'` >> /tmp/system.cfg.new\r"

顺便说一句,使用expect *可能是dangerous而不是推荐的,除非需要它。

您可以使用通用方法将提示符匹配为

set prompt "#|%|>|\\\$ $"

在这里,我们用反斜杠转义了字面的美元符号,最后一个美元用于行尾的正则表达式。

将任何命令发送到远程shell后,您可以expect将模式作为

expect -re $prompt