从Artifactory运行Shell脚本无法获取用户输入的问题求助
解决Shell脚本通过curl执行时的参数传递与交互问题
一、命令行传参无效的修复
你之前的传参写法错误,<REALM_VALUE>会被Shell解析为重定向,而非脚本参数。正确的传参方式是将参数放在bash -s之后:
curl -sL https://example.com/fsre-mw-dev-generic-local/fapodlookup_fido_changes_1.sh | bash -s comm
这样脚本内的$1就能正确获取到comm参数值。
二、管道执行时无法弹出输入提示的修复
管道执行时,bash的标准输入是curl的输出流,而非终端,导致read无法读取用户输入。可以强制让脚本从终端设备/dev/tty读取输入,执行命令改为:
curl -sL https://example.com/fsre-mw-dev-generic-local/fapodlookup_fido_changes_1.sh | bash -s < /dev/tty
这样即使通过管道执行,脚本也能正常弹出输入提示。
三、优化后的兼容脚本
以下脚本同时支持命令行传参和交互式输入(含管道场景),并增加参数合法性校验:
# 优先获取命令行参数 REALM="$1" # 无参数时强制从终端读取输入 if [[ -z "$REALM" ]]; then read -p "Enter realm[comm|ukg]:" REALM < /dev/tty fi # 验证参数有效性 if [[ -z "$REALM" || (! "$REALM" =~ ^(comm|ukg)$) ]]; then echo "ERROR: Realm must be 'comm' or 'ukg'." >&2 exit 1 fi # 后续业务逻辑示例 echo "Successfully set realm to: $REALM"
脚本优势
- 遵循"命令行参数优先"的通用脚本设计原则
- 强制从
/dev/tty读取输入,兼容本地执行、管道执行等多种场景 - 增加参数校验,避免无效输入导致后续逻辑出错
内容的提问来源于stack exchange,提问作者Keshav Kishor
相关产品推荐
相关产品推荐

