尝试正确引用您的变量:
spawn mysql -h "$db_host" -u "$db_user" -p "$db_pass" "create database $new_db_name"
未在双引号中引用的变量会受到分词和路径名扩展的影响。单引号下的变量不会扩展。在此处阅读有关 shell 引用的更多信息。
更新:您似乎实际上是通过此处文档对其进行扩展,但它仍然适用,因为您的论点仍需要在期望中引用。这就是预期的输入:
log_user 0
spawn mysql -h "localhost" -u "root" -p "" "create database db_2011"
expect "password:"
send "\r"
log_user 1
expect eof
如果您还没有引用它,这就是它的显示方式:
...
spawn mysql -h localhost -u root -p 'create database db_2011'
...
更新:
问题的原因实际上是因为mysql由于额外的参数而快速结束而没有显示密码提示。解决方案是手动发送命令。最好将整个脚本作为期望脚本运行,而不是嵌入式脚本,以减少混淆
#!/usr/bin/expect
# mysql credentials and connection data
set db_host "localhost"
set db_name "webui_dev"
set db_user "root"
set db_pass ""
set new_db_name "db_2011"
log_user 0
spawn mysql -h "$db_host" -u "$db_user" -p
expect "password:"
send "$db_pass\r"
expect "mysql>"
send "create database $new_db_name; exit; \r"
log_user 1
expect eof
将脚本保存为期望文件并使用expect -f expect_file
.