今天遇到了一些奇怪的行为。想知道这里是否有人可以告诉我什么行为不同。环境是 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
答案1
这是因为通配符的结果*mysql*
取决于您所在目录的内容。您的 shell 会尝试将 * 字符与目录中的文件名进行匹配,从而解释该字符(除非您将其转义或隐藏在引号中)。
为了说明,执行(在每个相关目录中)
echo yum list installed '*mysql*'
echo yum list installed *mysql*
ls -ld *mysql*