Pengantar singkat tentang use case:
Saya menggunakan docker
wadah untuk menjalankan go
tes saya menggunakan go test ./...
. Ini dapat dicapai dengan mudah menggunakan docker exec <container> /bin/sh -c "go test ./..."
. Sayangnya go test ./...
berjalan di semua subdirektori dan saya ingin mengecualikan satu (direktori vendor).
Solusi yang disarankan untuk ini adalah menggunakan perintah berikut:, go test $(go list ./... | grep -v '<excluded>'
entah bagaimana ini membuat saya dengan hasil berikut:
docker run golang:1.6.2-alpine /bin/sh -c "go test "
(Saya telah menguji ini pada kedua menjalankan dan exec, tetapi mereka mungkin menggunakan inti yang sama).
Ketika saya ssh ke dalam wadah menggunakan docker exec -it <container_id> /bin/sh
dan menjalankan perintah yang sama persis, itu berfungsi seperti pesona.
Tampaknya mengeksekusi perintah shell melalui docker exec / run tidak mendukung perintah yang bersarang $()
?
vendor
misalnya.
$(...)
diperluas oleh shell Anda di dalam tanda kutip ganda sebelum dijalankan di dalam wadah buruh pelabuhan. Jadi, masalahnya mungkin berasal dari konten direktori Anda saat ini. Berhasil docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
?
$(go list ./... | grep -v '<excluded>'
, apa<excluded>
itu?