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

如何在Ubuntu中用单行命令为交互式shell命令自动传递输入参数

Ubuntu 交互式Shell命令自动应答解决方案

你之前直接传参的方式失效,是因为这类交互式命令的输入是从标准输入(stdin)读取,而非读取命令行参数,因此参数无法被命令识别。可以选择以下三种方案解决:

方案1:使用Here Document按顺序传入输入

适合输入顺序固定的场景,将每一步的应答内容按交互顺序逐行写在EOF标记之间即可:

mycommand << EOF
yes
yes
no
# 按顺序补充剩余所有应答内容,一行对应一次输入
yes
EOF

方案2:使用printf+管道传入输入

适合短应答的简单场景,用\n分隔每一步的应答内容,通过管道传给目标命令:

printf "yes\nyes\nno\nyes\n" | mycommand
# 注意`\n`的数量和顺序要和交互步骤完全对应

如果所有应答都是yes,也可以直接用yes命令:

yes | mycommand

方案3:使用expect实现精准匹配应答(多步复杂交互场景推荐)

如果交互步骤可能变化、或者需要根据提示内容精准返回对应应答,推荐使用专门处理交互式命令的工具expect:

  1. 首先安装expect:
sudo apt update && sudo apt install expect -y
  1. 编写expect脚本(例:auto_answer.exp),根据你的提示内容匹配对应应答:
#!/usr/bin/expect
spawn mycommand
# 匹配第一条提示内容,返回yes
expect "第一条提示的关键字"
send "yes\r"
# 匹配确认提示,返回yes
expect "确认提示的关键字"
send "yes\r"
# 依次补充剩余所有匹配规则
expect "是否启用调试模式"
send "no\r"
# 等待命令执行结束
expect eof
  1. 给脚本加执行权限后运行即可:
chmod +x auto_answer.exp
./auto_answer.exp

注意事项

  • 部分安全相关的命令会直接读取终端(TTY)输入而非标准输入,这种场景下前两种方案会失效,必须使用expect模拟终端交互
  • 应答内容如果包含特殊字符(引号、反斜杠、空格等),需要根据对应语法做转义处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:15:01