bee icon indicating copy to clipboard operation
bee copied to clipboard

bee pack -ba="-ldflags "-X "”两个引号问题

Open barryzxy opened this issue 2 years ago • 4 comments

在执行一下命令是,有两个双引号,出现-X不识别问题 bee pack -be GOOS=windows -be GOARCH=amd64 -ba="-ldflags "-X 'main.BuildTime=$today' -X 'main.Version=$version'"" -a tmaiapp 以下是提醒

Z:\gowork\go1.17.4\pkg\tool\windows_amd64\link.exe: -X flag requires argument of the form importpath.name=value 2021/12/07 17:47:06 FATAL ▶ 0004 exit status 2

barryzxy avatar Dec 07 '21 09:12 barryzxy

有人可以处理这个问题么

wangqianwei avatar Nov 18 '22 03:11 wangqianwei

你可以看看 bee pack 命令是怎么处理的,我觉得近期没时间处理这个

flycash avatar Nov 24 '22 14:11 flycash

修改前的代码

        //// pack.go 506行
        args := []string{"build", "-o", binPath}
		if len(buildArgs) > 0 {
			args = append(args, strings.Fields(buildArgs)...)
		}

		if verbose {
			fmt.Fprintf(output, "\t%s%s+ go %s%s%s\n", "\x1b[32m", "\x1b[1m", strings.Join(args, " "), "\x1b[21m", "\x1b[0m")
		}

		execmd := exec.Command("go", args...)

可以做如下调整

        //// pack.go 506行
        var execmd *exec.Cmd
		buildCmdStr := "go build -o " + binPath + " " + buildArgs
		if runtime.GOOS == "windows" {
			execmd   = exec.Command("cmd", "/C", buildCmdStr)
		} else {
			execmd = exec.Command("/bin/bash", "-c", buildCmdStr)
		}

		if verbose {
			fmt.Fprintf(output, "\t%s%s+ %s%s%s\n", "\x1b[32m", "\x1b[1m", buildCmdStr, "\x1b[21m", "\x1b[0m")
		}

问题原因是因为buildArgs参数不能直接使用strings.Fields函数简单的通过空格来分割参数,并直接作为打包命令的参数来使用。buildArgs参数中的ldflags参数本身就带有多个空格。所以打包一定会存在问题。最小的改动就是直接拼接一下可执行的大打包命令。

wangqianwei avatar Jan 01 '23 12:01 wangqianwei

可以直接发一个合并请求吗?

flycash avatar Jan 02 '23 18:01 flycash