Eine kurze Einführung in den Anwendungsfall:
Ich verwende einen docker
Container, um meine go
Tests mit auszuführen go test ./...
. Dies kann leicht mit erreicht werden docker exec <container> /bin/sh -c "go test ./..."
. Läuft leider go test ./...
über alle Unterverzeichnisse und ich möchte eines ausschließen (das Anbieterverzeichnis).
Die empfohlene Lösung hierfür ist der folgende Befehl go test $(go list ./... | grep -v '<excluded>'
:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(Ich habe dies auf run und exec getestet, aber sie verwenden wahrscheinlich den gleichen Kern).
Wenn ich docker exec -it <container_id> /bin/sh
den gleichen Befehl verwende und in den Container stelle , funktioniert das wie ein Zauber.
Es scheint, dass die Ausführung von Shell-Befehlen durch das Docker exec / run keine Befehle unterstützt, die mit verschachtelt sind $()
.
vendor
zum Beispiel ein Verzeichnis .
$(...)
Ihre Shell in doppelte Anführungszeichen gesetzt wurde, bevor sie im Docker-Container ausgeführt wurde. Das Problem kann also von Ihrem aktuellen Verzeichnisinhalt herrühren. Hat docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
funktioniert
$(go list ./... | grep -v '<excluded>'
, was<excluded>
ist?