期待脚本:"未找到事件"在传递参数时

时间:2016-09-26 17:11:19

标签: bash expect

使用expect脚本重置服务器数据库中的密码时,收到以下消息。当我尝试重置包含"!"的密码时,我才会收到此错误。作为第一个角色。

[root@server]# ./changepw username !password!
-bash: !password!: event not found

我的脚本如下:

#!/usr/bin/expect -f

## Set up variables to be passed in as command line arguments
lassign $argv username password

spawn telnet 127.0.0.1 23
expect "200 PWD Server ready"
send "USER admin\r"
expect "300 please send the PASS"
send "PASS password\r"
expect "200 login OK, proceed"

# Use the line below for a password that must be quoted ie one  that contains a $ or a ! by escaping the double quotes
send "SETACCOUNTPASSWORD $username PASSWORD \"$password\"\r"

expect "200 OK"
send "quit\r"
interact

当我在CLI的脚本之外手动执行此操作时,这似乎有效,同时将密码括在引号中。它只能通过脚本失败。

1 个答案:

答案 0 :(得分:1)

这根本不是您的expect脚本的问题,而是您正在运行它的交互式shell的问题:在启用了历史记录扩展的交互式shell中,!foo(带有非数字参数foo)指的是历史记录中以foo开头的最新命令。

使用set +H关闭历史记录扩展(如果您希望默认情况下使用~/.bashrc),或在感叹号周围加上单引号:

set +H                           # turn off history expansion...
./changepw username !password!   # ...and this will now work

...或...

./changepw username '!password!' # or just add quotes