Проблемы с очисткой WINE после обновления (17.10 до 18.04 LTS)

Проблемы с очисткой WINE после обновления (17.10 до 18.04 LTS)

После обновления машины с 17.10 до 18.04LTS, ранее удачная установка Wine, похоже, сломалась. Учитывая множество сообщенных проблем (иинтересные комментарии от Клемана открытиях 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, пока я не уничтожу текущую (сбойную!).

Как мне тогда избавиться от этого вина? Если есть какие-то другие диагностики, которые я должен/мог бы провести, пожалуйста, дайте мне знать, и я обновлю этот вопрос.

решение1

Причина, по которой это не сработало, заключается в том, что в текущем каталоге был файл, соответствующий шаблону, который вы пытались передать apt.

Когда bash видит (незакавыченную и неэкранированную) звездочку, вопросительный знак или другой символ glob в командной строке, он проверяет файлы в текущем каталоге, и если какой-либо из них соответствует шаблону, слово, содержащее специальные символы, заменяется разделенным пробелами списком соответствующих файлов. Вы можете увидеть это в своем терминале, если наберете

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 вместо сохранения его начального значения, поэтому будет намного проще обнаружить такие ошибки. Очень жаль, что эта опция не включена по умолчанию, она бы позволила избежать бесчисленных случайных ошибок, которые проявляются только в том случае, если нужные файлы существуют в текущем каталоге.

Связанный контент