You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash执行其他命令/调用脚本时如何自动填充预设交互输入

自动向交互脚本传入预设输入的实现方案

根据你的场景,有两种常用实现方式,按需选择即可:

  • 固定顺序无分支的简单交互:用Here Document
    如果你每次运行./script.sh时,需要输入的内容顺序、内容本身完全固定,直接在调用脚本时用Here Document把所有输入按手动输入的顺序逐行写入即可,示例:
    #!/bin/bash
    # 第二个脚本auto_run.sh的内容
    ./script.sh <<'EOF'
    预设用户名
    第二个交互项的输入内容
    第三个交互项的输入内容
    y
    EOF
    
    说明:
    1. 开头<<'EOF'的单引号不要漏,作用是让中间的输入内容原样传递,不会被bash解析$、反引号这类特殊字符
    2. 每一行内容对应一次手动输入,和你手动操作时的输入顺序完全一致,行尾默认相当于按了回车
    3. 如果输入项很少,也可以简写为管道形式:echo -e "预设用户名\n第二个输入\n第三个输入\ny" | ./script.sh,输入项多的时候可读性差,不推荐
  • 交互有判断分支的复杂场景:用expect工具
    如果./script.sh的交互逻辑不是完全线性的(比如输入不符合要求会重弹提示、需要根据前一步输出判断下一步输入),或者脚本直接读取终端设备绕过了标准输入,就用expect来模拟真实的终端交互:
    1. 先安装expect:debian/ubuntu系执行sudo apt install expect,rhel/centos系执行sudo dnf install expect
    2. 第二个脚本写法示例:
    #!/usr/bin/expect
    # 启动目标脚本
    spawn ./script.sh
    # 匹配到username?提示时,发送预设用户名,\r模拟回车动作
    expect "username?"
    send "你的预设用户名\r"
    # 匹配后续的密码提示,发送对应密码
    expect "password:"
    send "你的预设密码\r"
    # 匹配确认提示,发送y
    expect "请确认操作(y/n):"
    send "y\r"
    # 等目标脚本执行完,把控制权交回当前终端
    interact
    
    说明:expect后面的字符串只需要写对应提示里能唯一匹配的关键字即可,不需要写完整提示内容;send末尾的\r不能漏,否则相当于只输入了内容没按回车确认。

注意:如果用Here Document/管道方式传参不生效,基本都是因为目标脚本直接读取/dev/tty而非标准输入,这种情况直接换expect方案即可。

内容的提问来源于stack exchange,提问作者elefant1000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:27:25