Giới thiệu ngắn về trường hợp sử dụng:
Tôi đang sử dụng một docker
container để chạy go
thử nghiệm của tôi bằng cách sử dụng go test ./...
. Điều này có thể dễ dàng đạt được bằng cách sử dụng docker exec <container> /bin/sh -c "go test ./..."
. Thật không may go test ./...
chạy trên tất cả các thư mục con và tôi muốn loại trừ một (thư mục nhà cung cấp).
Giải pháp được khuyên cho việc này là sử dụng lệnh sau : go test $(go list ./... | grep -v '<excluded>'
, bằng cách nào đó, điều này cho tôi kết quả như sau:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(Tôi đã thử nghiệm điều này trên cả chạy và thực thi, nhưng có lẽ chúng sử dụng cùng một lõi).
Khi tôi ssh vào container bằng cách sử dụng docker exec -it <container_id> /bin/sh
và chạy cùng một lệnh chính xác, nó hoạt động như một bùa mê.
Có vẻ như việc thực thi các lệnh shell qua docker exec / run không hỗ trợ bất kỳ lệnh nào được lồng vào $()
?
vendor
ví dụ.
$(...)
đã được mở rộng bởi shell của bạn bên trong dấu ngoặc kép trước khi nó được chạy bên trong container docker. Vì vậy, vấn đề có thể đến từ nội dung thư mục hiện tại của bạn. Đã docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
làm việc chưa?
$(go list ./... | grep -v '<excluded>'
, là những gì<excluded>
là?