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つのパッケージのみが表示されます(予想どおり)。
誰かがこれを修正する方法について何かアドバイスがあれば、それは大歓迎です、ありがとう!
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*"