أنا باستخدام 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 " (لقد اختبرت هذا على كل من تشغيل و إكسيك ، لكنها ربما تستخدم نفس الأساسية).
عندما سه في الحاوية باستخدام docker exec -it <container_id> /bin/sh وتشغيل نفس الأمر بالضبط ، وأنها تعمل مثل السحر.
يبدو أن تنفيذ أوامر شل الحوض الصغير عامل الميناء إكسيك / تشغيل لا يدعم أي أوامر متداخلة مع $()?
قد لا يعمل الأمر الخاص بك كما كنت تتوقع بفضل باش المشتركة مسكتك:
docker exec <container> /bin/sh -c "go test $(go list ./... | grep -v '<excluded>')"
فإن الأمر الذي تحاول تشغيل تنفيذ التوسع في سوبشيل $() على المضيف الخاص بك لأنه داخل علامات اقتباس مزدوجة.
هذا يمكن حلها عن طريق واحد نقلا عن الأمر الخاص بك كما اقترح @كونغلم في تعليقات السؤال.
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
حسنا ، لذلك لاحظ أن’ ((…) 'تم توسيعها من قبل قذيفة الخاص بك داخل علامات الاقتباس المزدوجة قبل تشغيله داخل حاوية عامل الميناء. لذلك ، قد تأتي المشكلة من محتوى الدليل الحالي. هل ‘عامل الميناء إكسيك الحاويات /بن/ش-ج’ الذهاب اختبار ((قائمة الذهاب ./… / البقرى الخامس " < استبعاد>") " عمل?