Une brève introduction au cas d'utilisation:
J'utilise un dockerconteneur pour exécuter mes gotests 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/shet 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 $()?
vendorpar 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?