xargs无法正常拆分参数 用gh CLI从.env设置GitHub秘钥报错
问题根源
你的猜测完全正确,报错是由xargs -I {}的参数传递逻辑导致的:
-I {}会将每一行完整的输入内容作为单个字符串参数替换到{}位置,你原命令实际执行的是gh secret set "SECRET1 -b \"djfjgdfkjg\"",gh 会把整串内容识别为密钥名,自然不符合仅允许字母、数字、下划线的命名规则。- 手动执行命令时,shell 会自动将命令拆分为多个独立参数传递给gh,所以可以正常运行。
修复方案
方案1:调整xargs参数(快速修复)
去掉-I {}配置,改用-L 1参数让xargs每次读取一行,自动将行内内容拆分为多个参数传递:
sed -r 's/^([A-Za-z0-9_]*)=(.*)$/\1 -b "\2"/g' test.env | xargs -L 1 gh secret set
方案2:逐行读取env文件(更稳定,支持值含特殊字符)
如果你的密钥值存在引号、空格等特殊字符,更推荐用while循环直接拆分每行的密钥名和值,避免参数解析问题:
while IFS='=' read -r key value; do # 跳过注释行和空行 [[ $key =~ ^#.*$ || -z $key ]] && continue gh secret set "$key" -b "$value" done < test.env
内容的提问来源于stack exchange,提问作者neilm
相关产品推荐
相关产品推荐

