Uma breve introdução ao caso de uso:
Estou usando um docker
contêiner para executar meus go
testes usando go test ./...
. Isso pode ser alcançado facilmente usando docker exec <container> /bin/sh -c "go test ./..."
. Infelizmente, go test ./...
é executado em todos os subdiretórios e eu gostaria de excluir um (o diretório do fornecedor).
A solução recomendada para isso é usar o seguinte comando go test $(go list ./... | grep -v '<excluded>'
:, de alguma forma, isso me deixa com o seguinte resultado:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(Eu testei isso tanto no run quanto no exec, mas eles provavelmente usam o mesmo núcleo).
Quando ssh no contêiner usando docker exec -it <container_id> /bin/sh
e executando exatamente o mesmo comando, ele funciona como um encanto.
Parece que a execução de comandos shell através do docker exec / run não suporta nenhum comando aninhado $()
?
vendor
por exemplo.
$(...)
foi expandido pelo seu shell entre aspas duplas antes de ser executado no contêiner do docker. Portanto, o problema pode vir do conteúdo atual do diretório. Funcionou docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
?
$(go list ./... | grep -v '<excluded>'
, o que<excluded>
é?