apt 列表无法正常工作。(Ubuntu 18.04,zsh 和 bash)

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

许多 shell(如 bash 或 zsh)不只是将输入通过管道传输到被调用的程序。相反,会执行一些扩展和替换。举个例子,bash 执行八种不同的扩展

例如,让我们看看类似 的内容ls my_fi*.txt。使用此命令,bash 将执行所谓的“路径名扩展”。如果my_file.txt当前目录中有一个名为的文件,则 shell 会将命令扩展为ls my_file.txtls程序永远不会看到my_fi*.txt参数,它只会获取扩展版本。

因此,当您输入 时apt list **将被替换为您当前目录中的文件列表,这就是apt list输入的内容。您基本上是通过您不打算使用的参数来过滤包列表。

为了防止 bash(我相信 zsh 的工作原理类似)进行所有扩展和替换,您可以屏蔽“触发”该过程的特殊字符。这样,它们就会被apt list不加改变地移交给(或您调用的任何程序)。

要屏蔽某个字符,可以在其前面加上反斜杠

apt list \*

或者你可以把整个论点放在引号里

apt list '*'

您可能需要注意,第一种方法适用于一个字符

apt list my_packa\*

第二种方法适用于整个论证

apt list "my_packa*"

相关内容