Below command runs without any error from terminal but fails from bash script.
/usr/local/go/bin/go build -o bin/adapter -ldflags="-X main.level=info" cmd/adapter/*
My bash script is as shown below :-
#!/bin/bash
export GO=/usr/local/go/bin/go
export ldflags="-ldflags=\"-X main.level=info\""
CMD="$GO build -o bin/adapter $ldflags cmd/adapter/*"
echo $CMD
${CMD}
Bash debug using "bash -x"
produces following output :-
+ export GO=/usr/local/go/bin/go
+ GO=/usr/local/go/bin/go
+ export 'ldflags=-ldflags="-X main.level=info"'
+ ldflags='-ldflags="-X main.level=info"'
+ CMD='/usr/local/go/bin/go build -o bin/adapter -ldflags="-X main.level=info" cmd/adapter/*'
+ echo /usr/local/go/bin/go build -o bin/adapter '-ldflags="-X' 'main.level=info"' 'cmd/adapter/*'
/usr/local/go/bin/go build -o bin/adapter -ldflags="-X main.level=info" cmd/adapter/*
+ /usr/local/go/bin/go build -o bin/adapter '-ldflags="-X' 'main.level=info"' 'cmd/adapter/*'
invalid value "\"-X" for flag -ldflags: missing =<value> in <pattern>=<value>
usage: go build [-o output] [build flags] [packages]
Run 'go help build' for details.
Am I doing something wrong?
Until now I tried using different double quote(") escaping techniques also tried $ldflags
and "$ldflags"
but gets the same output.
Update 1 :- Tried below option but still not working :-
ldflags=(-ldflags="-X main.level=info")
${ldflags[@]}
Debug output for above trial is as follow :-
+ mkdir -p bin
+ export GO=/usr/local/go/bin/go
+ GO=/usr/local/go/bin/go
+ ldflags=(-ldflags="-X main.level=info")
+ export ldflags
+ CMD='/usr/local/go/bin/go build -o bin/adapter -ldflags=-X main.level=info cmd/adapter/*'
+ echo /usr/local/go/bin/go build -o bin/adapter -ldflags=-X main.level=info 'cmd/adapter/*'
/usr/local/go/bin/go build -o bin/adapter -ldflags=-X main.level=info cmd/adapter/*
+ /usr/local/go/bin/go build -o bin/adapter -ldflags=-X main.level=info 'cmd/adapter/*'
malformed import path "main.level=info": invalid char '='
malformed import path "cmd/adapter/*": invalid char '*'