Короткий вступ до випадку використання:
Я використовую docker
контейнер для запуску своїх go
тестів, використовуючи go test ./...
. Це можна легко досягти, використовуючи docker exec <container> /bin/sh -c "go test ./..."
. На жаль, go test ./...
працює у всіх підкаталогах, і я хотів би виключити один (каталог постачальників).
Рекомендоване рішення для цього полягає у використанні наступної команди:, go test $(go list ./... | grep -v '<excluded>'
якимось чином це дає мені такий результат:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(Я тестував це на run і exec, але вони, ймовірно, використовують одне ядро).
Коли я впадаю в контейнер, використовуючи docker exec -it <container_id> /bin/sh
та запускаючи абсолютно ту саму команду, вона працює як шарм.
Здається, що виконання команд оболонки через docker exec / run не підтримує жодних вкладених команд $()
?
vendor
Наприклад , це каталог .
$(...)
була розширена вашою оболонкою всередині подвійних лапок, перш ніж її запустити всередині контейнера докер. Отже, проблема може виникнути з вашого поточного вмісту каталогу. Чи docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
працювали?
$(go list ./... | grep -v '<excluded>'
, що<excluded>
є?