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

После обновления машины с 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
задан 2 June 2019 в 20:35

1 ответ

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

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

echo *

, где будет напечатан список файлов / каталогов в текущем каталоге. В вашем случае шаблон wine* соответствовал файлу winehq.key, который был расположен в текущем каталоге, поэтому ваша команда была преобразована в

sudo apt purge winehq.key

, что, естественно, привело к сообщению об ошибке, так как нет пакетов с таким именем в хранилище.

В этом случае мы хотим, чтобы паттерн глобуса не интерпретировался с помощью bash, а передавался буквально apt. Это делается путем экранирования или цитирования специальных символов, например:

sudo apt purge wine\*

или эквивалентно:

sudo apt purge 'wine*'

Причина, по которой вы можете видеть, что он работает в другом каталоге, заключается в том, что если ни один файл не соответствует шаблону, глобус остается без изменений, например с буквальной звездочкой. Так что, если вы запустили команду в другом каталоге, она, вероятно, сработает. Но чтобы быть в безопасности, всегда полезно заключать в кавычки / экранировать любые специальные символы bash, если вы хотите, чтобы они передавались команде, которую вы выполняете.

Этого можно избежать, установив опцию nullglob bash с помощью команды

shopt -s nullglob

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

1
ответ дан 2 June 2019 в 20:35

Другие вопросы по тегам:

Похожие вопросы: