web-dev-qa-db-ja.com

aptリストが正しく機能していません。 (Ubuntu 18.04、zshおよびbash)

Ubuntu 18.04でzshまたはbashを使用してaptを使用してパッケージをリストするのに問題があります。

シナリオは次のとおりです。

以前は、システム上のすべてのパッケージをapt list *でリストしたり、これらのパッケージのサブセットをapt list *partial-name*などでリストしたりできました。しかし、これを行っても何も表示されません。 apt listは、名前を明示的に記述した場合にのみパッケージを表示します。つまり、build-essentialを探しているときにapt list build-essen*と入力すると、出力はリストされません。ただし、apt list build-essentialと記述すると、1つのパッケージのみが表示されます(予想どおり)。

誰かがこれを修正する方法について何かアドバイスがあれば、それは大歓迎です、ありがとう!

2
Elliot Wasem

Bashやzshなどの多くのシェルは、呼び出されたプログラムに入力をパイプするだけではありません。代わりに、いくつかの展開と置換が実行されます。あなたにアイデアを与えるために、bashは 8種類の展開 を実行します。

たとえば、ls my_fi*.txtのようなものを見てみましょう。このコマンドを使用すると、bashは「パス名展開」と呼ばれる処理を実行します。現在のディレクトリにmy_file.txtという名前のファイルがある場合、シェルはコマンドをls my_file.txtに展開します。 lsプログラムはmy_fi*.txtパラメーターを認識せず、拡張バージョンのみを取得します。

したがって、apt list *と入力すると、*が現在のディレクトリ内のファイルのリストに置き換えられ、apt listが入力として取得されます。基本的には、使用するつもりのない引数でパッケージリストをフィルタリングしています。

Bash(zshは同様に機能すると信じています)をすべての拡張および置換から保護するために、プロセスを「トリガー」する特殊文字をマスクできます。そうすれば、それらはapt list(または呼び出しているプログラム)に変更されずに引き渡されます。

文字をマスクするには、その前にバックスラッシュを置くことができます

apt list \*

または、引数全体を引用符で囲むことができます

apt list '*'

最初の方法は1文字に適用されることに注意してください

apt list my_packa\*

2番目の方法は、引数全体に適用されます

apt list "my_packa*"
2