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

如何在单条命令行中为Shell脚本的多个提示符提供输入

解决Shell脚本自动输入的问题

问题说明

你尝试的sh -a -y plan.sh无效,是因为-a和-y会被当成sh命令的参数,而非传递给你的plan.sh;而Here-Document报错,是因为结束标记END_OF_INPUT必须顶格书写,不能有任何前导空格。

方案1:修复Here-Document写法

确保结束标记单独占一行且无缩进:

./plan.sh << END_OF_INPUT
a
y
END_OF_INPUT

如果需要缩进结束标记,可使用<<-,但结束标记只能用制表符(Tab)缩进(不能用空格):

./plan.sh <<- END_OF_INPUT
a
y
	END_OF_INPUT  # 此处必须用Tab缩进

方案2:用管道传递输入

用echo或printf直接生成输入并通过管道传给脚本,写法更简洁:

# 用echo(部分系统可能需要-e参数支持转义)
echo -e "a\ny" | ./plan.sh

# 用printf更可靠(避免echo的兼容性问题)
printf "a\ny\n" | ./plan.sh

方案3:修改脚本支持命令行参数(推荐)

如果可以修改plan.sh,让它直接接受命令行参数会更规范灵活。示例修改后的脚本:

#!/bin/bash
# 优先从命令行参数获取输入,无参数则提示用户输入
choice=${1:-$(read -p "请输入(a/b): " val; echo "$val")}
confirm=${2:-$(read -p "请输入(y/n): " val; echo "$val")}

# 后续逻辑直接使用$choice和$confirm变量即可
echo "选择项: $choice"
echo "确认状态: $confirm"

修改后即可用你最初期望的方式执行:

./plan.sh a y
# 或用sh执行
sh plan.sh a y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:00:52