O Que É Globbing? Expansão de Padrões de Nome de Arquivo
Globbing é a expansão pelo shell de padrões com wildcard como *.js na lista real de nomes de arquivo correspondentes antes de um comando rodar.
Quando você escreve rm *.tmp, o shell, não o rm, descobre quais arquivos correspondem a *.tmp e substitui o padrão por essa lista. Isso é globbing: expansão de nomes de arquivo baseada em padrões. É incrivelmente conveniente, mas tem casos extremos surpreendentes no CI, especialmente quando um padrão não corresponde a nada.
O que é globbing
Globbing é como o shell transforma um padrão com wildcard em uma lista de nomes de arquivo. Acontece antes de o comando rodar, então o comando nunca vê o padrão, apenas a lista expandida de correspondências.
Padrões de glob comuns
*corresponde a qualquer sequência de caracteres exceto um ponto inicial.?corresponde a qualquer caractere único.[abc]corresponde a um caractere do conjunto.**corresponde através de diretórios quando globstar está habilitado.
A surpresa da não correspondência
Por padrão, se um glob não corresponde a nada, o shell deixa o padrão literal inalterado. Então rm *.tmp sem arquivos correspondentes passa *.tmp ao rm como um nome literal, produzindo um erro confuso.
Controlando o comportamento do glob
Opções do Bash mudam isso: nullglob faz um padrão sem correspondência expandir para nada, e failglob o torna um erro. Escolher a opção certa evita comportamento surpreendente em scripts.
Globbing no CI
Um passo como cp dist/*.js out/ pode falhar inesperadamente se nenhum arquivo JS foi construído, porque o padrão não expandido é passado adiante. Proteger com nullglob ou verificar que arquivos existem primeiro torna passos de CI robustos.
Globs previsíveis em runners gerenciados
Nos runners da Latchkey, defina shopt -s nullglob em um passo quando um padrão pode legitimamente não corresponder a nada, para que um resultado vazio seja tratado de forma limpa em vez de falhar em um padrão literal.
Principais conclusões
- Globbing é o shell expandindo padrões com wildcard em nomes de arquivo antes de um comando rodar.
- Se nada corresponder, o padrão literal é passado adiante por padrão.
- Opções como
nullglobefailglobtornam correspondências vazias seguras ou explícitas no CI.