アップグレード後にWINEを消去する際に問題が発生する(17.10から18.04 LTS)

アップグレード後にWINEを消去する際に問題が発生する(17.10から18.04 LTS)

マシンを17.10から18.04LTSにアップグレードした後、以前は問題なくインストールされていたWineが壊れてしまったようです。報告されている多くの問題(およびクレムからの興味深いコメントLinux Mintの発見に続いて、古いWineを消去して、「標準的な」指示ここは Askubuntu です。

残念ながら、私はあまり遠くまで行けません。

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 を消去するまで、新しい Wine のインストールを続行すべきではないと思います。

では、この Wine を取り除くにはどうしたらいいでしょうか? 他に実行すべき/実行できる診断がある場合は、お知らせください。この質問を更新します。

答え1

動作しなかった理由は、 に渡そうとしたパターンに一致するファイルが現在のディレクトリに存在したためですapt

bash はコマンドラインで(引用符で囲まれておらずエスケープもされていない)アスタリスク、疑問符、その他のグロブ文字を見つけると、現在のディレクトリ内のファイルをチェックし、パターンに一致するものがあれば、その特殊文字を含む単語をスペースで区切られた一致するファイルの一覧に置き換えます。ターミナルで次のように入力すると、この状態を確認できます。

echo *

ここで、現在のディレクトリの下にあるファイル/ディレクトリのリストが出力されます。あなたの場合、パターンは現在のディレクトリにあるwine*ファイルと一致したので、コマンドは次のように変換されました。winehq.key

sudo apt purge winehq.key

もちろん、リポジトリ内にその名前のパッケージがないため、エラー メッセージが表示されました。

この場合、glob パターンを bash で解釈するのではなく、文字どおりに に渡す必要がありますapt。これは、次のように特殊文字をエスケープまたは引用符で囲むことで実現します。

sudo apt purge wine\*

または同等:

sudo apt purge 'wine*'

別のディレクトリで動作することが確認できる理由は、パターンに一致するファイルがない場合、glob はそのまま残される (例: リテラル アスタリスク) ためです。したがって、別のディレクトリでコマンドを実行した場合は、おそらく動作するでしょう。ただし、安全のために、実行中のコマンドに渡す必要がある場合は、特殊な bash 文字を引用符で囲むかエスケープすることをお勧めします。

nullglobこの動作は、bashオプションをコマンドで設定することで回避できます。

shopt -s nullglob

このオプションを有効にすると、ファイルと一致しないパターンは初期値を保持する代わりに null に設定されるため、このようなバグを見つけるのがはるかに簡単になります。このオプションがデフォルトで有効になっていないのは本当に残念です。このオプションが有効になっていると、現在のディレクトリに適切なファイルが存在する場合にのみ明らかになる無数の不安定なバグを回避できます。

関連情報