今天遇到了一些奇怪的行为。想知道这里是否有人可以告诉我有什么不同的行为。环境是 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 如何使用通配符。我现在真正想知道的是为什么它将它放在一个文件夹中但不在另一个文件夹中。我以 root 身份运行,printenv 显示相同的输出(除了 PWD),实际上在两次运行命令之间唯一的变化是cd /opt
谁能告诉我为什么会发生这种情况,或者需要看什么才能看到为什么会有所不同?TIA
这是因为
*mysql*
globbing 的结果取决于您所在目录的内容。您的 shell 通过尝试将其与目录中的文件名匹配来解释 * 字符(除非您对其进行转义或将其隐藏在引号中)。为了说明,执行(在每个有问题的目录中)