O preenchimento automático do Bash ajudou imensamente com as convenções de nomenclatura do tipo php para nomes de unidades do systemd. Resolve completamente a mistura de Kebab-case, snake_case, camelCase.
Mas ainda fico frustrado com coisas como errar a caixa da primeira letra. t<tab><tab>...sigh...<backspace>T<tab>Thunderbolt
... B<tab><tab>...sigh...<backspace>b<tab>bluetooth
... e nem me fale sobre a renomeação do networkmanager :)
Vejo que os arquivos de conclusão do bash são usadossystemctl $1 list-units --all "$2*";
Qual é a melhor maneira de fazer isso nocaseglob
?
Existem 2 possibilidades: listar
list-units
todas as unidades e fazer a correspondência anycase posteriormente no pipeline ou converter o$2*
glob em um glob anycase.Para começar, mostraremos apenas o código atual do seu link, recuado novamente para maior legibilidade:
Eles provavelmente deveriam estar usando
printf
em vez de,echo
mas vamos ignorar isso.Para a primeira solução, remova
"$2*"
duas vezes e altere owhile
loop:Isso funciona, mas é bastante lento no meu sistema, pois o systemd trabalha muito em cada unidade.
Para a segunda solução, crie uma função para substituir um padrão glob como
n
by[nN]
, para que ambos os casos correspondam.O texto acima pega cada caractere e usa bash
${ch,*}
para convertê-lo em letras minúsculas ou${ch^*}
maiúsculas. Então a função para listar as correspondências é simplesmente: