Krótkie wprowadzenie do przypadku użycia:
Używam docker
kontenera do uruchamiania go
testów przy użyciu go test ./...
. Można to łatwo osiągnąć za pomocą docker exec <container> /bin/sh -c "go test ./..."
. Niestety go test ./...
działa we wszystkich podkatalogach i chciałbym wykluczyć jeden (katalog dostawcy).
Zalecanym rozwiązaniem jest użycie następującego polecenia: go test $(go list ./... | grep -v '<excluded>'
w jakiś sposób pozostawia mi to następujący wynik:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(Testowałem to zarówno w trybie run, jak i exec, ale prawdopodobnie używają tego samego rdzenia).
Kiedy ssh do kontenera używam docker exec -it <container_id> /bin/sh
i uruchamiam dokładnie to samo polecenie, działa to jak urok.
Wydaje się, że wykonywanie poleceń powłoki przez exec / run dokera nie obsługuje żadnych zagnieżdżonych poleceń $()
?
vendor
.
$(...)
został rozszerzony przez twoją powłokę wewnątrz podwójnych cudzysłowów, zanim została uruchomiona w kontenerze dokera. Problem może pochodzić z bieżącej zawartości katalogu. Czy docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
działa?
$(go list ./... | grep -v '<excluded>'
czym<excluded>
jest?