Nach dem Upgrade einer Maschine von 17.10 auf 18.04LTS scheint die zuvor erfolgreiche Installation von Wine zu scheitern. Angesichts der vielen gemeldeten Probleme (und derinteressante Kommentare von Clembei Linux Mint-Entdeckungen), dachte ich, ich würde einfach das alte Wine wegblasen und von Grund auf neu installieren, nach dem"kanonische" Anweisungenhier auf Askubuntu.
Leider komme ich nicht sehr weit. Als Antwort auf
sudo apt purge wine*
Ich erhalte die Fehlermeldung:
[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'
Doch, denn which wine
ich bekomme /usr/bin/wine
, und dpkg
es gibt mir Folgendes:
$ 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
Ich weiß wirklich nicht, was ich als nächstes tun soll. Ich habe alle mir eingefallenen Suchen zu meinen Fehlermeldungen durchgeführt, bin aber nicht schlauer geworden. Und ich glaube nicht, dass ich mit einer Neuinstallation von Wine fortfahren sollte, bevor ich die aktuelle (kaputte!) gelöscht habe.
Wie kann ich diesen Wine dann loswerden? Wenn es andere Diagnosen gibt, die ich ausführen sollte/könnte, lassen Sie es mich bitte wissen und ich werde diese Frage aktualisieren.
Antwort1
Der Grund dafür, dass es nicht funktioniert hat, liegt darin, dass sich im aktuellen Verzeichnis eine Datei befand, die dem Muster entsprach, das Sie übergeben wollten apt
.
Wenn Bash in der Befehlszeile ein (nicht in Anführungszeichen gesetztes und nicht maskiertes) Sternchen, Fragezeichen oder ein anderes Glob-Zeichen sieht, prüft es die Dateien im aktuellen Verzeichnis und wenn eine davon dem Muster entspricht, wird das Wort, das die Sonderzeichen enthält, durch eine durch Leerzeichen getrennte Liste der übereinstimmenden Dateien ersetzt. Sie können dies in Ihrem Terminal sehen, wenn Sie Folgendes eingeben:
echo *
wo eine Liste der Dateien/Verzeichnisse im aktuellen Verzeichnis gedruckt wird. In Ihrem Fall wine*
stimmte das Muster mit der Datei überein winehq.key
, die sich im aktuellen Verzeichnis befand, sodass Ihr Befehl in
sudo apt purge winehq.key
was natürlich zu einer Fehlermeldung führte, da im Repository keine Pakete mit diesem Namen vorhanden sind.
In diesem Fall möchten wir, dass das Glob-Muster nicht von Bash interpretiert, sondern wörtlich an weitergegeben wird apt
. Dies erreichen wir, indem wir die Sonderzeichen maskieren oder in Anführungszeichen setzen, wie folgt:
sudo apt purge wine\*
oder gleichwertig:
sudo apt purge 'wine*'
Der Grund, warum es in einem anderen Verzeichnis funktionieren könnte, ist, dass der Glob unverändert bleibt, z. B. mit dem wörtlichen Sternchen, wenn keine Dateien dem Muster entsprechen. Wenn Sie Ihren Befehl also in einem anderen Verzeichnis ausführen, würde er wahrscheinlich funktionieren. Um auf Nummer sicher zu gehen, ist es jedoch immer eine gute Idee, alle speziellen Bash-Zeichen in Anführungszeichen zu setzen/zu maskieren, wenn Sie möchten, dass sie an den ausgeführten Befehl weitergegeben werden.
Dieses Verhalten kann durch Setzen der nullglob
Bash-Option mit dem Befehl vermieden werden
shopt -s nullglob
Wenn diese Option aktiviert ist, wird jedes Muster, das nicht mit Dateien übereinstimmt, auf null gesetzt, anstatt seinen Anfangswert beizubehalten. Dadurch ist es viel einfacher, solche Fehler zu erkennen. Es ist wirklich bedauerlich, dass diese Option nicht standardmäßig aktiviert ist. Dadurch würden zahllose unberechenbare Fehler vermieden, die nur dann auftreten, wenn die richtigen Dateien im aktuellen Verzeichnis vorhanden sind.