Как написать сценарий оболочки (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$//'`
Другие вопросы по тегам