Como faço para escrever um script shell (bash) para converter todos os nomes de arquivos correspondentes no diretório de opções de linha de comando?

StackOverflow https://stackoverflow.com/questions/855265

Pergunta

Aparentemente, a resposta à minha pergunta "Eu posso restringir a saída de cobertura de nariz para o diretório (em vez de pacotes)?" não é , mas eu posso passar uma opção --coverage-package=PACKAGE a cara com o nome do pacote de cada arquivo .py no diretório.

Assim, por exemplo, se o diretório contém:

foo.py
bar.py
baz.py

... então eu precisaria usar o comando:

nosetests --with-coverage --coverage-package=foo --coverage-package=bar --coverage-package=baz

Então, minha pergunta é, alguém pode escrever algum código shell script (de preferência sh ou bash) a tomar todas as nomes de arquivos no diretório atual com uma extensão .py e gerar a linha de comando acima (com as extensões .py removidos) ? Minhas habilidades festança são bastante limitadas. (Estou tentado a fazê-lo em Python.)

Foi útil?

Solução

nosetests --with-coverage $(for f in *.py; do echo --cover-package="${f%.*}"; done)

O truque é aqui é usar parâmetro substituição para remover a extensão de arquivo.

${f%.*}

Outras dicas

E se o cuidado de fazê-lo correto (o que significa, não permitem wordsplitting para cortar seus nomes de arquivos separados ou inesperada englobamento para expandir a nomes de arquivos aleatórios), use um array:

files=(*.py)
packages=("${files[@]/%.py/}")
nosetests --with-coverage "${packages[@]/#/--coverage-package=}"
nosetests --with-coverage `ls *.py|sed -e 's/^/--cover-package=' -e 's/\.py$//'`
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top