ユースケースの簡単な紹介:
_go test ./...
_を使用してdocker
コンテナーを使用してgo
テストを実行しています。これは、_docker exec <container> /bin/sh -c "go test ./..."
_を使用して簡単に実現できます。残念ながら、_go test ./...
_はすべてのサブディレクトリにわたって実行されており、1つ(ベンダーディレクトリ)を除外したいと思います。
これに対する推奨される解決策は、次のコマンドを使用することです:_go test $(go list ./... | grep -v '<excluded>'
_、どういうわけかこれは私に次の結果を残す:
_docker run golang:1.6.2-Alpine /bin/sh -c "go test "
_(私はこれを実行と実行の両方でテストしましたが、おそらく同じコアを使用しています)。
_docker exec -it <container_id> /bin/sh
_を使用してコンテナーにsshし、まったく同じコマンドを実行すると、チャームのように動作します。
Docker exec/runを介したシェルコマンドの実行は、$()
でネストされたコマンドをサポートしていないようです。
一般的なbashの問題により、コマンドが期待どおりに機能しない可能性があります。
_docker exec <container> /bin/sh -c "go test $(go list ./... | grep -v '<excluded>')"
_
実行しようとしているコマンドは、二重引用符で囲まれているため、ホストでサブシェル$()
の展開を実行します。
これは、質問のコメントで@cuonglmによって提案されているように、コマンドを単一引用符で囲むことで解決できます。
_docker exec <container> /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
_
編集:ちょっとしたデモ
_[wbarnwell@Host ~]$ docker run -it --rm busybox /bin/sh -c '$(whoami)'
/bin/sh: root: not found
[wbarnwell@Host ~]$ docker run -it --rm busybox /bin/sh -c "$(whoami)"
/bin/sh: wbarnwell: not found
_
_go test --help
_から:
_-run regexp Run only those tests and examples matching the regular
expression.
_
したがって、go test -run "(!vendor)" ./...
のようなものは、その特定のフォルダをスキップすると思います。