我需要使用expect脚本运行此cmd:
:GWrite
但由于其中的2美元,它出错了。我该如何解决?我需要变量只对我发送cmd的设备可见。
以下是通过脚本在UBNT设备上更改密码的完整脚本(通过ssh工作,但因为$ 2而不是脚本):
echo users.1.password=`grep %user% /etc/passwd | awk -F: '{print $2}'` >> /tmp/system.cfg.new
答案 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