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

如何在Shell脚本中捕获go run main.go的输出内容?

解决Go脚本输出捕获到Shell变量的问题

问题根源

你之前的命令是将Go程序的输出写入到名为return_resp的文件,而非赋值给同名Shell变量,因此echo $return_resp无法得到预期内容。

正确捕获方式

1. 仅捕获标准输出(stdout)

如果Go脚本的提示信息和日志都输出到标准输出,直接用命令替换完成变量赋值:

return_resp=$(go run main.go)

2. 同时捕获标准输出和标准错误(stderr)

Go程序的日志(比如慢SQL信息)通常会输出到标准错误流(stderr),若需将这部分内容也捕获到变量,需把stderr重定向到stdout:

return_resp=$(go run main.go 2>&1)

3. 验证捕获结果

用printf输出变量可完整保留换行和格式,避免echo自动压缩换行的问题:

printf "%s" "$return_resp"

4. 同时保存到文件和变量

如果需要既把输出存到变量,又写入文件留档,可结合tee命令:

return_resp=$(go run main.go 2>&1 | tee output.log)

额外补充

  • 命令替换$(...)会自动去掉输出末尾的换行符,若需保留完整换行,可通过以下方式处理:
    return_resp=$(go run main.go 2>&1; echo x)
    return_resp=${return_resp%x}
    
  • 若要根据Go脚本的执行结果做判断,可结合$?获取退出码:
    return_resp=$(go run main.go 2>&1)
    exit_code=$?
    if [ $exit_code -ne 0 ]; then
        echo "Go脚本执行失败: $return_resp"
        exit $exit_code
    fi
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:04:57