这是最终目标:使用expect脚本执行mysql命令以在出现提示时发送密码。共有3个文件
以下是代码:
test.sh(返回连接到mysql数据库所需的密码)
grep hibernate.connection.password /opt/cisco/cpam/properties/vx.hibernate.properties | sed 's/hibernate.connection.password=//g'
test1.sh(需要执行的mysql命令)
mysql -u cpam -p --protocol=tcp vxdb < /opt/cisco/cpam/import/MySQL_Views.sql
test.exp(执行mysql命令时发送密码的expect脚本)
set password [exec ./test.sh]
exec ./test1.sh
expect "Enter password: "
send "$password\r"
expect eof
我运行expect test.exp的结果是我只看到提示符:
Enter password:
任何专家都可以帮我看看出了什么问题?这肯定意味着test1.sh已经成功运行,而且我已经尝试了很多次,包括只使用静态密码。仍然只是提示。
非常感谢!
答案 0 :(得分:1)
为了使程序可以通过expect
和send
进行互动,您需要使用spawn
而不是exec
启动它。试试这个:
set password [exec ./test.sh]
spawn ./test1.sh
expect "Enter password: "
send "$password\r"
expect eof