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 wine
obtengo /usr/bin/wine
y dpkg
me 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.key
que 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 nullglob
opció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.