Problemas para purgar WINE después de la actualización (17.10 a 18.04 LTS)

Problemas para purgar WINE después de la actualización (17.10 a 18.04 LTS)

Después de actualizar una máquina de 17.10 a 18.04LTS, la instalación de Wine que antes era satisfactoria parece estar defectuosa. Dados los muchos problemas reportados (y lacomentarios interesantes de Clemen los descubrimientos de Linux Mint), pensé en eliminar el antiguo Wine y reinstalarlo desde cero siguiendo lasinstrucciones "canónicas"aquí en Askubuntu.

Desgraciadamente no llego muy lejos. En respuesta a

sudo apt purge wine*

Recibo el mensaje de error:

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

Sin embargo, which wineobtengo /usr/bin/winey dpkgme da esto:

$ 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

Realmente no sé qué hacer a continuación. He hecho todas las búsquedas que se me ocurren sobre mis mensajes de error, pero no me doy cuenta. Y no creo que deba continuar con una nueva instalación de Wine hasta que haya eliminado la actual (¡fallida!).

Entonces, ¿cómo puedo deshacerme de este vino? Si hay algún otro diagnóstico que deba o pueda ejecutar, hágamelo saber y actualizaré esta pregunta.

Respuesta1

La razón por la que no funcionó es que había un archivo en el directorio actual que coincidía con el patrón al que intentaste pasar apt.

Cuando bash ve un asterisco, un signo de interrogación u otro carácter global (sin comillas ni escape) en la línea de comando, verifica los archivos en el directorio actual y, si alguno de ellos coincide con el patrón, la palabra que contiene los caracteres especiales se reemplaza por un lista separada por espacios de los archivos coincidentes. Puedes ver esto en tu terminal si escribes

echo *

donde se imprimirá una lista de los archivos/directorios del directorio actual. En su caso, el patrón wine*coincidía con el archivo winehq.keyque estaba ubicado en el directorio actual, por lo que su comando se transformó a

sudo apt purge winehq.key

lo que por supuesto resultó en un mensaje de error ya que no hay paquetes con ese nombre en el repositorio.

En este caso, queremos que bash no interprete el patrón global, sino que se pase literalmente a apt. Esto se hace escapando o citando los caracteres especiales, así:

sudo apt purge wine\*

o equivalente:

sudo apt purge 'wine*'

La razón por la que puede verlo funcionar en un directorio diferente es que cuando ningún archivo coincide con el patrón, el globo se deja como está, por ejemplo, con el asterisco literal. Entonces, si ejecutara su comando en un directorio diferente, probablemente funcionaría. Pero para estar seguro, siempre es una buena idea citar/escapar cualquier carácter bash especial, si desea que se pase al comando que está ejecutando.

Este comportamiento se puede evitar configurando la nullglobopción bash con el comando

shopt -s nullglob

Si esta opción está habilitada, cualquier patrón que no coincida con los archivos se establecerá como nulo en lugar de conservar su valor inicial, por lo que será mucho más fácil detectar dichos errores. Es realmente desafortunado que esta opción no esté habilitada de forma predeterminada, evitaría innumerables errores erráticos que sólo son aparentes si existen los archivos correctos en el directorio actual.

información relacionada