
오늘 이상한 행동을 겪었습니다. 여기 누군가가 무엇이 다르게 행동하는지 말해 줄 수 있는지 궁금합니다. 환경은 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가 와일드카드를 glob하는 방식 때문이라고 생각합니다. 내가 지금 당장 알고 싶은 것은 왜 한 폴더에는 저장되고 다른 폴더에는 저장되지 않는가입니다. 나는 둘 다 루트로 실행하고 있으며 printenv는 동일한 출력(PWD 제외)을 표시합니다. 문자 그대로 명령을 두 번 실행하는 사이에 변경되는 유일한 것은 다음과 같습니다.cd /opt
왜 이런 일이 발생하는지 또는 왜 다른지 확인하기 위해 살펴봐야 할 사항이 무엇인지 말해 줄 수 있는 사람이 있나요? 티아
답변1
이는 글로빙의 결과가 *mysql*
현재 있는 디렉토리의 내용에 따라 달라지기 때문입니다. 쉘은 * 문자를 디렉토리의 파일 이름과 일치시키려고 시도하여 (이스케이프하거나 따옴표로 숨기지 않는 한) 해석합니다.
설명하기 위해 (문제의 각 디렉토리에서) 실행하십시오.
echo yum list installed '*mysql*'
echo yum list installed *mysql*
ls -ld *mysql*