在运行的shell脚本中有可能需要交互输入指令或确认。如下面安装expect指令需要输入密码。
例如创建三个节点的redis集群,在创建集群过程中需要三次输入交互。
a.sh中片段:
#!/bin/sh
docker start redis-node01 redis-node02 redis-node03
docker exec -it redis-node01 /bin/bash
#此时需要输入
#....
安装expect
$ sudo apt-get install expect
创建auto_input_to_a.sh
#!/usr/bin/expect -f
spawn ./a.sh
expect "/data# "
send "redis-cli --cluster create 192.168.196.128:6379 192.168.196.128:6380 192.168.196.128:6381 --cluster-replicas 0\n"
expect "Can I set the above configuration? (type 'yes' to accept):"
send "yes\n"
expect "/data# "
send "exit\n"
expect off
注意: 第一行是/usr/bin/expect,这个是选用解释器的意思,我们shell一般选的是 /bin/bash,这里不是
spawn: 指定需要将哪个命令自动化
expect: 需要等待的消息
send: 是要发送的命令
expect off: 指明命令交互结束