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_FLAGSbiế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_FLAGSbiế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 $4là "-Xvà $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 settừ biến tập lệnh không?
Giải pháp khả thi duy nhất ở đây là thay đổi EGO_BUILD_FLAGSbiế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 .ebuildthay 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!