Eine kurze Einführung in den Anwendungsfall:
Ich verwende einen dockerContainer, um meine goTests 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/shden 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 $().
vendorzum 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?