عامل الميناء إكسيك / تشغيل شل القيادة التعشيش

مقدمة قصيرة لحالة الاستخدام:

أنا باستخدام 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

من عند go test --help:

-run regexp     Run only those tests and examples matching the regular                expression.

لذلك أعتقد أن شيئا مثل go test -run "(!vendor)" ./... سوف تخطي هذا المجلد معين.

حسنا ، لذلك لاحظ أن’ ((…) 'تم توسيعها من قبل قذيفة الخاص بك داخل علامات الاقتباس المزدوجة قبل تشغيله داخل حاوية عامل الميناء. لذلك ، قد تأتي المشكلة من محتوى الدليل الحالي. هل ‘عامل الميناء إكسيك الحاويات /بن/ش-ج’ الذهاب اختبار ((قائمة الذهاب ./… / البقرى الخامس " < استبعاد>") " عمل?

لماذا لا يتم تشغيل الأوامر من برنامج نصي?

What exactly command did you run? In $(go list ./... | grep -v '<excluded>", ما هو

انها دليل ، ‘بائع’ على سبيل المثال.