如何显示系统上所有可用的unix命令?

如何显示系统上所有可用的unix命令?

我在读一本书,Learning Unix for OS X by Dave Taylor。它说:

要快速查看系统上的所有二进制可执行文件(Unix 程序),

打开终端,按住Shift键,然后按Esc-?,或按 ,Control-X然后按Shift-1(用于Shift-1获得感叹号)。

然而,在命令显示在终端中之前,系统首先会提示(询问)您做出选择:

$ 
Display all 1453 possibilities? (y or n)

如果您按下n键盘上的按键,您将返回到命令提示符,并且不会发生任何其他事情。但是,如果按下该y键,您将在终端窗口中看到 Unix 命令流的多列列表。

然而,问题是,当我按住Shift键并按下时Esc-?什么也没有发生。按下Control-X后跟 也是如此Shift-1。我究竟做错了什么?使用此功能之前是否需要启用任何设置?我在 Mac El Capitan 上使用 iTerm2。它也不适用于股票终端。任何帮助将非常感激。谢谢。

答案1

书中的说明适用于 bash。 Zsh 是一个不同的程序,具有不同的键绑定。

在 zsh 中,您可以使用以下命令查看所有命令(外部、内置、函数、别名甚至关键字...)的列表:

type -m '*'

仅以他们的名字为例:

whence -wm '*' | sed 's/:[^:]*$//'

或者仅对于外部命令的名称:

print -rlo -- $commands:t | less

$commands是一个包含所有外部命令的数组。这历史修改器 :t截断命令路径的目录部分(仅保留t艾尔)。print -rlo打印它们r按字母顺序排列的 aw订单,每份一份伊内。

更长,但不那么神秘:

for p in "$path[@]"; do (cd ${p:-.} && ls); done | sort -u | less

可以调整它以在任何 sh 风格的 shell 中工作:

(IFS=:; for p in $PATH; do (cd ${p:-.} && ls); done) | sort -u | less

(我在这里列出的所有命令都假设命令路径中没有“不寻常”的字符。)

答案2

尽管按TAB两次就可以达到托马斯提到的效果。

但如果这不起作用,那么尝试这个简单但肮脏的黑客:

for i in `echo $PATH | sed 's:\:: :g'`
do
       echo $i
done

稍后,您可以根据需要/方便更改视图。

答案3

感谢@Gilles 的回答,我发现问题中描述的命令适用于bashshell。

对于 bash 用户

因此,对于未来的访问者,如果您使用的是bashshell,请参考上面问题描述中描述的命令来显示您系统上所有可用的 Unix 命令。

对于 zsh 用户

如果您使用的是zshshell,显示所有命令的正确方法是:

键入!(感叹号字符)并按Tab键两次。

即,按Shift+ 键1,然后按Tab键两次。

如果这对您不起作用,请参阅 Gilles 和 SHW 在其他答案中描述的技巧。

相关内容