如何在bash脚本中为交互式可执行文件依次传递输入内容?
自动传递交互式输入的实现方法
有三种常用的方案可以满足需求:
- 方法1:Here Document(最推荐,固定输入场景最易用)
把需要按顺序输入的内容放到Here Document块中,直接绑定到可执行文件的标准输入,修改后的脚本如下:
#!/bin/bash ./myExecutable << EOF 你的实际用户名 你的实际密码 EOF
两个EOF分隔符之间的内容会按行依次传给程序,刚好匹配先输用户名、再输密码的交互逻辑。
- 方法2:管道传递短输入
如果输入内容简单,也可以用echo加管道的方式一行写完:
#!/bin/bash echo -e "你的实际用户名\n你的实际密码" | ./myExecutable
-e参数可以让echo识别转义字符\n,实现换行输入的效果。
- 方法3:复杂交互场景用expect工具
如果后续需要根据程序的输出动态返回不同的输入,推荐用专门的交互式自动化工具expect:
#!/bin/bash expect -c ' spawn ./myExecutable expect "Please enter username..." send "你的实际用户名\r" expect "Please enter passsword..." send "你的实际密码\r" expect eof '
注意:部分系统默认没有预装expect,需要提前通过对应包管理器安装,比如Debian/Ubuntu系执行apt install expect,CentOS/RHEL系执行yum install expect
安全提醒:如果输入的密码属于敏感信息,不要直接明文写在脚本中,建议从环境变量、加密配置文件等安全渠道读取,避免凭证泄露。
内容的提问来源于stack exchange,提问作者tomiyos654
相关产品推荐
相关产品推荐

