كيف أكتب بعض (باش) شيل لتحويل جميع أسماء مطابقة في دليل لقيادة خط خيارات؟
-
21-08-2019 - |
سؤال
ويبدو أن الإجابة على سؤالي "هل يمكنني تقييد الانتاج تغطية الأنف إلى دليل (بدلا من الحزمة)؟" ليس ، لكنني يمكن أن تمر خيار --coverage-package=PACKAGE
إلى الأنف مع اسم الحزمة من كل ملف .py في الدليل.
وهكذا على سبيل المثال، إذا كان الدليل يحتوي على:
foo.py
bar.py
baz.py
... ثم أود أن الحاجة إلى استخدام الأمر:
nosetests --with-coverage --coverage-package=foo --coverage-package=bar --coverage-package=baz
ولذا سؤالي هو، يمكن للشخص إرسال بعض التعليمات البرمجية شيل (ويفضل SH أو باش) اتخاذ جميع أسماء الملفات في الدليل الحالي مع ملحق .py وتوليد سطر الأوامر أعلاه (مع الملحقات .py إزالة) ؟ مهاراتي باش محدودة للغاية. (أنا يميل إلى مجرد القيام بذلك في بيثون).
المحلول
nosetests --with-coverage $(for f in *.py; do echo --cover-package="${f%.*}"; done)
والخدعة هنا هو استخدام استبدال المعلمة ل إزالة ملحق الملف.
${f%.*}
نصائح أخرى
وإذا كنت تهتم لتحقيق ذلك صحيح (وهو ما يعني، لا تسمح wordsplitting لخفض أسماء الخاص بك بعيدا أو غير متوقع globbing للتوسع في أسماء عشوائي)، استخدام صفيف:
files=(*.py)
packages=("${files[@]/%.py/}")
nosetests --with-coverage "${packages[@]/#/--coverage-package=}"
nosetests --with-coverage `ls *.py|sed -e 's/^/--cover-package=' -e 's/\.py$//'`