Как написать сценарий оболочки (bash) для преобразования всех соответствующих имен файлов в каталоге в параметры командной строки?
Видимо ответ на мой вопрос "Могу ли я ограничить вывод покрытия носа каталогом (а не пакетом)?" нет, но я могу передать --coverage-package=PACKAGE
возможность узнать имя пакета каждого файла.py в каталоге.
Так, например, если каталог содержит:
foo.py
bar.py
baz.py
... тогда мне нужно будет использовать команду:
nosetests --with-coverage --coverage-package=foo --coverage-package=bar --coverage-package=baz
Поэтому мой вопрос: может ли кто-нибудь написать некоторый код сценария оболочки (предпочтительно sh или bash), чтобы взять все имена файлов в текущем каталоге с расширением.py и сгенерировать указанную выше командную строку (с удаленными расширениями.py)? Мои навыки в bash довольно ограничены. (Я испытываю желание просто сделать это в Python.)
3 ответа
nosetests --with-coverage $(for f in *.py; do echo --cover-package="${f%.*}"; done)
Хитрость здесь в том, чтобы использовать замену параметра для удаления расширения файла.
${f%.*}
И если вы хотите сделать это правильно (что означает, что не допускайте разделения слов, чтобы разделить ваши имена файлов или неожиданное смещение, расширяющееся до случайных имен файлов), используйте массив:
files=(*.py)
packages=("${files[@]/%.py/}")
nosetests --with-coverage "${packages[@]/#/--coverage-package=}"
nosetests --with-coverage `ls *.py|sed -e 's/^/--cover-package=' -e 's/\.py$//'`