基于当前目录的Globbing

今天进入一些奇怪的行为。 想知道如果有人在这里可以告诉我什么是不同的行为。 环境是一个RHEL 6.7服务器。

我运行以下命令:

yum list installed *mysql*

如果我的cwd是/或许多其他地方,我会得到以下输出:

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

在其他几个文件夹(包括/ opt在这个服务器上),我运行相同的命令,并得到这个输出:

Error: No matching Packages to list

现在我知道我通常需要在这个命令中逃避通配符。 如果我运行它:

yum list installed \*mysql\*

那么我在这两个地方得到正确的输出。 我收集这是因为如何bash globs通配符。 现在我真正想知道的是为什么它把它放在一个文件夹中,而不是在另一个文件夹中。 我以root身份运行,printenv显示相同的输出(PWD除外),从字面上看,两次运行命令之间的唯一变化是cd /opt

任何人都可以告诉我为什么发生这种事情,或者看看有什么事情要看,为什么它可能会有所不同? TIA

这是因为*mysql* globbing的结果取决于你所在目录的内容。你的shell通过尝试将目录中的文件名与目录中的文件名进行匹配来解释*字符(除非你将其转义或隐藏在引号中) 。

为了说明,执行(在每个有问题的目录中)

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