在将机器从 17.10 升级到 18.04LTS 后,之前愉快的 Wine 安装似乎很糟糕。鉴于报告的许多问题(以及Clem关于 Linux Mint 发现的有趣评论),我想我会吹掉旧的 Wine,然后按照Askubuntu 上的“规范”说明从头开始重新安装。
不幸的是,我没有走得很远。作为回应
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,直到我删除了当前的(无聊的!)一个。
那么,我怎样才能摆脱这种酒呢?如果我应该/可以运行任何其他诊断程序,请告诉我,我会更新这个问题。
它不起作用的原因是当前目录中有一个文件与您尝试传递给的模式匹配
apt
。当 bash 在命令行中看到(未引用和未转义的)星号、问号或其他 glob 字符时,它会检查当前目录中的文件,如果有任何匹配模式,则包含特殊字符的单词将替换为匹配文件的空格分隔列表。如果您键入,您可以在终端中看到它
将打印当前目录下的文件/目录列表。在您的情况下,模式与位于当前目录中
wine*
的文件匹配,因此您的命令被转换为winehq.key
这当然会导致错误消息,因为存储库中没有具有该名称的包。
在这种情况下,我们希望 glob 模式不被 bash 解释,而是按字面意思传递给
apt
. 这是通过转义或引用特殊字符来完成的,如下所示:或等效地:
您可能会看到它在不同的目录中工作的原因是,当没有文件与模式匹配时,glob 将保持原样,例如使用文字星号。因此,如果您在不同的目录中运行命令,它可能会起作用。但是为了安全起见,如果您希望将它们传递给您正在运行的命令,引用/转义任何特殊的 bash 字符总是一个好主意。
nullglob
可以通过使用命令设置 bash 选项来避免这种行为如果启用此选项,则任何与文件不匹配的模式都将设置为 null 而不是保留其初始值,因此更容易发现此类错误。很遗憾,默认情况下没有启用此选项,它可以避免无数不稳定的错误,这些错误只有在当前目录中存在正确的文件时才会出现。