我在读一本书,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 的回答,我发现问题中描述的命令适用于bash
shell。
对于 bash 用户
因此,对于未来的访问者,如果您使用的是bash
shell,请参考上面问题描述中描述的命令来显示您系统上所有可用的 Unix 命令。
对于 zsh 用户
如果您使用的是zsh
shell,显示所有命令的正确方法是:
键入!
(感叹号字符)并按Tab键两次。
即,按Shift+ 键1,然后按Tab键两次。
如果这对您不起作用,请参阅 Gilles 和 SHW 在其他答案中描述的技巧。