Совершил сегодня странное поведение. Интересно, может ли кто-нибудь здесь сказать мне, что ведет себя иначе? Среда - это сервер 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*
Подстановка зависит от содержимого каталога, в котором вы находитесь. Ваша оболочка интерпретирует символ * (если вы не экранируете его или не скрываете в кавычках), пытаясь сопоставить его с именами файлов в каталоге.
Для иллюстрации выполните (в каждом из рассматриваемых каталогов)
echo yum list installed '*mysql*'
echo yum list installed *mysql*
ls -ld *mysql*