將機器從 17.10 升級到 18.04LTS 後,先前順利安裝的 Wine 似乎陷入了困境。鑑於報告的許多問題(以及克萊姆有趣的評論關於 Linux Mint 的發現),我想我應該把舊的 Wine 吹走,然後從頭開始重新安裝“規範”指令這裡是阿斯庫本圖。
不幸的是,我並沒有走得太遠。作為回應
sudo apt purge wine*
我收到錯誤訊息:
[sudo] password for user:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package winehq.key
E: Couldn't find any package by glob 'winehq.key'
E: Couldn't find any package by regex 'winehq.key'
然而,因為which wine
我得到/usr/bin/wine
,並dpkg
給了我這個:
$ dpkg -l | grep wine
ii fonts-wine 3.0-1ubuntu1 all Windows API implementation - fonts
ii libwine:amd64 3.0-1ubuntu1 amd64 Windows API implementation - library
ii wine-stable 3.0-1ubuntu1 all Windows API implementation - standard suite
ii wine-stable-amd64 4.0.1~bionic amd64 WINE Is Not An Emulator - runs MS Windows programs
ii wine64 3.0-1ubuntu1 amd64 Windows API implementation - 64-bit binary loader
ii winetricks 0.0+20180217-1all package manager for Wine to install software easily
我真的不知道下一步該做什麼。我已經對錯誤訊息進行了所有我能想到的搜索,但仍然一無所知。而且我覺得在我刪除目前的(無聊!)之前我不應該繼續安裝新的 Wine。
那我要怎麼擺脫這種酒呢?如果我應該/可以運行任何其他診斷,請告訴我,我將更新此問題。
答案1
它不起作用的原因是當前目錄中有一個文件與您嘗試傳遞給的模式匹配apt
。
當bash 在命令列中看到(未加引號且未轉義的)星號、問號或其他通配符時,它會檢查當前目錄中的文件,如果有任何文件與模式匹配,則包含特殊字元的單字將被替換為空格分隔的匹配文件清單。如果您輸入,您可以在終端機中看到這一點
echo *
將列印目前目錄下的檔案/目錄清單。在您的情況下,模式與當前目錄中的wine*
檔案匹配,因此您的命令被轉換為winehq.key
sudo apt purge winehq.key
這當然會導致錯誤訊息,因為儲存庫中沒有具有該名稱的套件。
在這種情況下,我們希望 glob 模式不被 bash 解釋,而是按字面意思傳遞給apt
.這是透過轉義或引用特殊字元來完成的,如下所示:
sudo apt purge wine\*
或等價:
sudo apt purge 'wine*'
您可能會看到它在不同的目錄中工作的原因是,當沒有文件與模式匹配時,glob 將保持原樣,例如帶有文字星號。因此,如果您在不同的目錄中運行命令,它可能會起作用。但為了安全起見,如果您希望將任何特殊 bash 字元傳遞給您正在運行的命令,那麼引用/轉義它們總是一個好主意。
nullglob
可以透過使用以下命令設定 bash 選項來避免此行為
shopt -s nullglob
如果啟用此選項,則任何與檔案不符的模式都會設定為 null,而不是保留其初始值,因此更容易發現此類錯誤。確實不幸的是,預設未啟用此選項,它可以避免無數不穩定的錯誤,這些錯誤只有在當前目錄中存在正確的檔案時才會出現。