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

bash脚本中无法捕获peer chaincode invoke命令输出存入变量

捕获peer chaincode invoke输出并提取项目ID的解决方案

核心问题原因

peer chaincode invoke 命令的运行日志、执行返回结果默认会输出到标准错误流(stderr),仅捕获标准输出(stdout)会得到空值。

具体实现步骤

  • 第一步:合并标准错误流到标准输出,完整捕获命令输出存入变量
    执行命令时添加2>&1将stderr合并到stdout,再赋值给变量:
    # 替换成你实际的invoke参数,记得加--waitForEvent确保拿到执行完成的结果
    invoke_result=$(peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mycc --waitForEvent -c '{"Args":["MintProject",...]}' 2>&1)
    
  • 第二步:根据输出格式提取项目ID

    场景1:输出有固定的ID前缀标识

    比如输出中存在Minted project ID: proj_123456这类固定格式的行,可直接用grep提取:
    # 把Minted project ID: 替换成你实际输出里的ID前缀
    project_id=$(echo "$invoke_result" | grep -oP 'Minted project ID: \K.*')
    

    场景2:返回结果包含JSON格式的payload

    先提取JSON串再用jq解析对应字段即可,比如返回内容包含result: {"payload":{"project_id":"proj_789"}}:
    # 先提取JSON部分再用jq取字段,替换成你实际的JSON路径
    project_id=$(echo "$invoke_result" | grep -oP 'result: \K.*' | jq -r '.payload.project_id')
    

注意事项

  • 必须给invoke命令添加--waitForEvent参数,等待交易提交确认并返回链码执行结果,否则只会拿到交易提交成功的回执,不会包含铸造生成的项目ID
  • 执行脚本的环境需提前配置好peer命令运行所需的环境变量(MSP路径、节点地址、TLS证书路径等),否则命令执行报错也会导致无法拿到预期输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:12:02