Problemas ao limpar o WINE após a atualização (17.10 a 18.04 LTS)

Problemas ao limpar o WINE após a atualização (17.10 a 18.04 LTS)

Depois de atualizar uma máquina de 17.10 para 18.04LTS, a instalação anteriormente feliz do Wine parece ter sido interrompida. Tendo em conta os muitos problemas relatados (e acomentários interessantes de Clemnas descobertas do Linux Mint), pensei em simplesmente acabar com o Wine antigo e reinstalar do zero seguindo oinstruções "canônicas"aqui no Askubuntu.

Infelizmente, não vou muito longe. Em resposta a

sudo apt purge wine*

Recebo a mensagem de erro:

[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'

No entanto, for which wineI get /usr/bin/wine, e dpkgme dá isto:

$ 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

Eu realmente não sei o que fazer a seguir. Fiz todas as pesquisas que pude imaginar nas minhas mensagens de erro, mas não sou mais sábio. E não acho que deva prosseguir com uma nova instalação do Wine até que eu tenha eliminado a atual (borrada!).

Como posso me livrar desse vinho, então? Se houver algum outro diagnóstico que eu deva/poderia executar, avise-me e atualizarei esta pergunta.

Responder1

A razão pela qual não funcionou é que havia um arquivo no diretório atual que correspondia ao padrão para o qual você tentou passar apt.

Quando o bash vê um asterisco, ponto de interrogação ou outro caractere glob (sem aspas e sem escape) na linha de comando, ele verifica os arquivos no diretório atual e, se algum deles corresponder ao padrão, a palavra que contém os caracteres especiais é substituída por um lista separada por espaço dos arquivos correspondentes. Você pode ver isso em seu terminal se digitar

echo *

onde uma lista dos arquivos/diretórios no diretório atual será impressa. No seu caso, o padrão wine*correspondeu ao arquivo winehq.keyque estava localizado no diretório atual, então seu comando foi transformado para

sudo apt purge winehq.key

o que obviamente resultou em uma mensagem de erro, pois não há pacotes com esse nome no repositório.

Nesse caso, queremos que o padrão glob não seja interpretado pelo bash, mas sim transmitido literalmente para apt. Isso é feito escapando ou citando os caracteres especiais, assim:

sudo apt purge wine\*

ou equivalente:

sudo apt purge 'wine*'

A razão pela qual você pode vê-lo funcionar em um diretório diferente é que quando nenhum arquivo corresponde ao padrão, o glob é deixado como está, por exemplo, com o asterisco literal. Portanto, se você executasse seu comando em um diretório diferente, provavelmente funcionaria. Mas, para garantir a segurança, é sempre uma boa ideia citar/escapar quaisquer caracteres especiais do bash, se você quiser que eles sejam transmitidos ao comando que você está executando.

Este comportamento pode ser evitado definindo a nullglobopção bash com o comando

shopt -s nullglob

Se esta opção estiver habilitada, qualquer padrão que não corresponda aos arquivos será definido como nulo em vez de manter seu valor inicial, portanto será muito mais fácil detectar tais bugs. É realmente lamentável que esta opção não esteja habilitada por padrão, pois evitaria inúmeros bugs erráticos que só são aparentes se os arquivos corretos existirem no diretório atual.

informação relacionada