Como usar globstar no bash mais antigo que v4

0

Usamos esse comando para executar todos os testes usando mocha : mocha ./src/test/**/*.js --recursive

Observe o duplo ** . Ele funciona bem em qualquer bash moderno, exceto no sistema de CI, que é um RedHat com GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) .

Eu li que v3 não suporta globstar duplo .

  • Tentei ativá-lo executando shopt -s globstar
    • , mas falhou em dizer shopt: globstar: invalid shell option name .
  • pedi ao devops do cliente para atualizar o bash
    • mas ele disse "não me mostra que uma nova versão do bash está disponível".
  • Essa outra outra resposta não foi útil.

Pergunta: Como posso executar um comando com ** em um linux bash v3. *? Qualquer solução alternativa?

    
por DiAlex 20.02.2017 / 12:55

1 resposta

5

Se ele não suporta globstar, então não é compatível.

No entanto, na maioria das vezes, você pode adaptar find , xargs e / ou ferramentas semelhantes. Seu caso é bem simples, com tudo em um diretório, então:

find src/test -name "*.js" -exec mocha --recursive {} +

find src/test -name "*.js" -print | xargs -d '\n' mocha --recursive

( encontrar coloca os nomes dos arquivos no lugar de {} , e os xargs os anexam ao final. Então, em ambos os casos, os argumentos repetidos devem ir no final depois de todas as --opções, mas isso não deve ser um problema para a maioria dos programas.)

Como alternativa, se a execução de mocha uma vez para cada arquivo estiver correta, então:

find src/test -name "*.js" -exec mocha {} --recursive \;

Compare -exec … \; (um arquivo por vez) e o anterior -exec … + (o maior número possível).

Observação: Em todos os exemplos acima, o "*.js" precisa ser citado porque você deseja que find o processe, não o shell.

    
por 20.02.2017 / 13:09