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