Linux

基於目前目錄的萬用字元

  • May 12, 2016

今天遇到了一些奇怪的行為。想知道這裡是否有人可以告訴我有什麼不同的行為。環境是 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 通過嘗試將其與目錄中的文件名匹配來解釋 * 字元(除非您對其進行轉義或將其隱藏在引號中)。

為了說明,執行(在每個有問題的目錄中)

echo yum list installed '*mysql*'
echo yum list installed *mysql*
ls -ld *mysql*

引用自:https://serverfault.com/questions/776481