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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:10:01