แนะนำสั้น ๆ เกี่ยวกับกรณีการใช้งาน:
ฉันใช้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 "
(ฉันได้ทดสอบสิ่งนี้ทั้งการรันและการประมวลผล แต่พวกเขาอาจใช้แกนเดียวกัน)
เมื่อฉัน ssh ลงในภาชนะที่ใช้docker exec -it <container_id> /bin/sh
และเรียกใช้คำสั่งเดียวกันแน่นอนมันทำงานเหมือนมีเสน่ห์
ดูเหมือนว่าการเรียกใช้คำสั่งเชลล์ในรางที่นักเรียกใช้ / รันไม่สนับสนุนคำสั่งใด ๆ ที่ซ้อนอยู่ด้วย$()
?
vendor
เช่น
$(...)
เชลล์ของคุณถูกขยายในเครื่องหมายคำพูดคู่ก่อนที่มันจะทำงานในคอนเทนเนอร์นักเทียบท่า ดังนั้นปัญหาอาจมาจากเนื้อหาไดเรกทอรีปัจจุบันของคุณ ไม่docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'
ทำงานหรือไม่
$(go list ./... | grep -v '<excluded>'
สิ่งที่เป็น<excluded>
คืออะไร?