在将机器从 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 之前,我不应该继续进行全新的 Wine 安装。
那么,我该如何摆脱这个 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
如果启用此选项,则任何与文件不匹配的模式都将设置为空,而不是保留其初始值,因此更容易发现此类错误。遗憾的是此选项默认未启用,它可以避免无数不稳定的错误,这些错误只有在当前目录中存在正确的文件时才会显现出来。