如果你想在一个脚本中同时使用bash和expect,你可以将expect部分嵌入到bash脚本中。以下是一个示例:
#!/bin/bash
# 设置MySQL服务器地址、端口、用户名和密码
MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USER="your_username"
MYSQL_PASSWORD="your_password"
# 设置要执行的SQL命令
MYSQL_COMMAND="SHOW DATABASES;"
# 使用expect来自动化交互式的过程
expect << EOF
# 使用spawn启动mysql命令行客户端
spawn mysql -h $MYSQL_HOST -P $MYSQL_PORT -u $MYSQL_USER
# expect会等待密码提示符出现,并自动输入密码
expect "Enter password: "
send "$MYSQL_PASSWORD\r"
# 发送执行SQL命令的命令
send "$MYSQL_COMMAND\r"
# expect会等待结果返回,并将结果输出到屏幕
expect "\r\n"
# 将剩余的输出(如果有)发送到屏幕
while {1} {
expect {
"\r\n" {
send_user "\n"
break
}
default {
send_user "-"
exp_continue
}
}
}
# 关闭spawned的进程
expect eof
EOF
# 这里可以继续编写你的bash脚本内容
echo "Bash script continues here..."
在这个示例中,我们使用了bash来设置变量和调用expect。然后,我们使用<< EOF
和EOF
来定义一个here文档,其中包含了expect的命令。这样,bash脚本就可以在执行expect命令后继续执行其他bash命令。
注意:在实际应用中,你可能需要根据你的具体需求来调整这个脚本,例如处理expect命令的输出或者错误等。同时,也要注意在脚本中直接写入MySQL的用户名和密码可能会带来安全风险,建议使用更安全的方式来存储和传递这些敏感信息。