Une brève introduction au cas d'utilisation:
J'utilise un docker
conteneur pour exécuter mes go
tests en utilisant go test ./...
. Ceci peut être réalisé facilement en utilisant docker exec <container> /bin/sh -c "go test ./..."
. Malheureusement, go test ./...
s'exécute dans tous les sous-répertoires et j'aimerais en exclure un (le répertoire des fournisseurs).
La solution recommandée pour cela utilise la commande suivante go test $(go list ./... | grep -v '<excluded>'
:, cela me laisse en quelque sorte le résultat suivant:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(J'ai testé cela sur run et exec, mais ils utilisent probablement le même noyau).
Lorsque je ssh dans le conteneur en utilisant docker exec -it <container_id> /bin/sh
et en exécutant exactement la même commande, cela fonctionne comme un charme.
Il semble que l'exécution de commandes shell via le docker exec / run ne prend en charge aucune commande imbriquée $()
?
vendor
par exemple.
$(...)
votre shell a été développé par des guillemets doubles avant d'être exécuté à l'intérieur du conteneur Docker. Le problème peut donc provenir du contenu de votre répertoire actuel. A docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
fonctionné?
$(go list ./... | grep -v '<excluded>'
, qu'est-ce que<excluded>
c'est?