如何在单条命令行中为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
相关产品推荐
相关产品推荐

