Tôi có tập lệnh bash bên ngoài được hệ thống gọi bash
để biên dịch các nguồn golang và tôi có thể định cấu hình một số varialbes. Kịch bản này là một golang-build.eclass . Hàm xây dựng trong tập lệnh này là:
golang-build_src_compile() {
debug-print-function ${FUNCNAME} "$@"
ego_pn_check
set -- env GOPATH="${WORKDIR}/${P}:$(get_golibdir_gopath)" \
GOCACHE="${T}/go-cache" \
go build -v -work -x ${EGO_BUILD_FLAGS} "${EGO_PN}"
echo "$@"
"$@" || die
}
Điều duy nhất tôi có thể cấu hình từ bên ngoài là EGO_BUILD_FLAGS
biến.
Vấn đề với tập lệnh này là khi tôi đang cố gắng sử dụng dấu ngoặc kép trong EGO_BUILD_FLAGS
biến, ví dụ:
EGO_BUILD_FLAGS="-ldflags \"-X main.buildVersion=0\""
tập lệnh xây dựng đang in (với echo
) lệnh chính xác để thực thi nhưng lệnh thực tế bị lỗi invalid value "\"-X" for flag -ldflags
. Nếu tôi chỉ sao chép đầu ra được in và chạy thủ công thì nó đã hoàn thành thành công.
Đây là phiên bản đơn giản hóa để tái tạo nó:
EGO_BUILD_FLAGS="-ldflags \"-X main.buildVersion=0\""
set -- go build -x ${EGO_BUILD_FLAGS} github.com/g4s8/gitstrap/cmd/gitstrap
echo "$@"
"$@"
đầu ra:
go build -x -ldflags "-X main.buildVersion=0" github.com/g4s8/gitstrap/cmd/gitstrap
invalid value "\"-X" for flag -ldflags: missing =<value> in <pattern>=<value>
usage: go build [-o output] [-i] [build flags] [packages]
Run 'go help build' for details.
Dòng đầu tiên ở đây là lệnh làm việc và trông giống như mong đợi. Có vẻ như vấn đề ở đây $4
là "-X
và $5
đang có main.buildVersion=0"
.
Có thể thoát dấu ngoặc kép để truyền tham số xây dựng chính xác dưới dạng đối số vị trí đến set
từ biến tập lệnh không?
Giải pháp khả thi duy nhất ở đây là thay đổi EGO_BUILD_FLAGS
biến, set -- ...
lệnh không truy cập được, nó nằm trong tệp script bên ngoài.
eval
để mở rộng EGO_BUILD_FLAGS
. Tức là, có vẻ như hành vi đó đã được dự định nhưng bị lãng quên. Nó thường được coi là thực hành xấu, nhưng, bây giờ, có lẽ bạn sẽ phải đơn giản xác định src_compile()
trực tiếp trong .ebuild
thay vì gọi hàm được cung cấp bởi eclass.
-ldflags
đối với các bản dựng Golang, vì khi nó đứng, điều này thực sự không thể. Chúc may mắn!