【发布时间】:2016-08-30 23:25:02
【问题描述】:
我正在尝试使用 expect 远程登录服务器来更改用户密码。应用程序要求,如果您要更改的密码包含特殊字符,则将其引用。问题是,expect send 语句也需要被引用,当我尝试将两者结合起来时,脚本失败了。如果我从密码周围删除引号并且不使用特殊字符,它运行正常。
send "CHANGEUSERPASSWORD $username PASSWORD "etdgsfdh$"\r"
如果我使用上面的行并运行我得到的脚本
extra characters after close-quote
while executing
"send "CHANGEUSERPASSWORD $username PASSWORD "e"
此外,它似乎只不喜欢 $ 字符,因为我可以将 @ 附加到密码的末尾而不用引号将其括起来,并且脚本运行良好。如何使用包含 $ 的密码使其工作,该密码需要我将其用引号括起来,这显然与期望引用冲突?请注意,$ 可以在密码中的任何位置,而不仅仅是在我的示例中的末尾。
这是我的完整上下文脚本:
#!/usr/bin/expect -f
set password [lindex $argv 0];
spawn telnet 192.168.100.100 106
expect "200 PWD Server ready"
send "USER user\r"
expect "300 please send the PASS"
send "PASS pass\r"
expect "200 login OK, proceed"
send "CHANGEUSERPASSWORD $username PASSWORD "etdgsfdh$"\r"
expect "200 OK"
send "quit\r"
interact
我也尝试使用这一行将密码设置为变量:
set password [lindex $argv 0];
并改变这一行:
send "CHANGEACCOUNTPASSWORD user PASSWORD $password;" send "\r"
然后我运行
./script password
我得到这个错误:
usage: send [args] string
while executing
"send "CHANGEUSERPASSWORD user PASSWORD $password;" send "\r""
我做错了什么?
【问题讨论】: