Globbing com base no diretório atual

Globbing com base no diretório atual

Tive um comportamento estranho hoje. Querendo saber se alguém aqui pode me dizer o que está se comportando de maneira diferente. O ambiente é um servidor RHEL 6.7.

Eu executo o seguinte comando:

yum list installed *mysql*

Se meu cwd for/ou vários outros lugares, recebo a seguinte saída:

Installed Packages MySQL-client-advanced.x86_64 5.6.27-1.el6 @/MySQL-client-advanced-5.6.27-1.el6.x86_64 MySQL-server-advanced.x86_64 5.6.27-1.el6 @/MySQL-server-advanced-5.6.27-1.el6.x86_64 MySQL-shared-advanced.x86_64 5.6.27-1.el6 @/MySQL-shared-advanced-5.6.27-1.el6.x86_64 MySQL-shared-compat-advanced.x86_64 5.6.27-1.el6 @/MySQL-shared-compat-advanced-5.6.27-1.el6.x86_64

Em algumas outras pastas (incluindo /opt neste servidor), executo o mesmo comando e obtenho esta saída:

Error: No matching Packages to list

Agora eu sei que normalmente preciso escapar do curinga neste comando. Se eu executá-lo como:

yum list installed \*mysql\*

então obtenho a saída correta em ambos os locais. Presumo que isso se deva ao modo como o bash globs curingas. O que eu realmente quero saber agora é por que ele fica em uma pasta, mas não na outra. Estou executando ambos como root, printenv mostra saída idêntica (diferente de PWD), literalmente a única coisa que muda entre a execução do comando nas duas vezes écd /opt

Alguém pode me dizer por que isso está acontecendo ou o que observar para ver por que pode ser diferente? TIA

Responder1

Isso ocorre porque o resultado do *mysql*globbing depende do conteúdo do diretório em que você está. Seu shell interpreta o caractere * (a menos que você o escape ou oculte entre aspas) tentando combiná-lo com os nomes dos arquivos no diretório.

Para ilustrar, execute (em cada um dos diretórios em questão)

echo yum list installed '*mysql*'
echo yum list installed *mysql*
ls -ld *mysql*

informação relacionada