Osx

如何顯示系統上所有可用的 unix 命令?

  • November 16, 2020

我在看書,Learning Unix for OS X by Dave Taylor。它說:

要快速查看系統上的所有二進制執行檔(Unix 程序),

打開終端,按住Shift鍵,然後按Esc-?,或按Control-X後跟Shift-1Shift-1用於獲得驚嘆號)。

但是,在終端中顯示命令之前,首先會提示(要求)您做出選擇:

$ 
Display all 1453 possibilities? (y or n)

如果您按下n鍵盤上的鍵,您將被帶回命令提示符,並且不會發生其他任何事情。但是,如果您按下該y鍵,您將在終端視窗中看到一個多列的 Unix 命令流列表。

但是,問題是,當我按住Shift鍵並按下時,Esc-?什麼也沒有發生。與 PressingControl-X後跟相同Shift-1。我究竟做錯了什麼?在使用此功能之前,我需要啟用任何設置嗎?我在 Mac El Capitan 上使用 iTerm2。它也不適用於股票終端。任何幫助將非常感激。謝謝你。

書中的說明是針對 bash 的。Zsh 是具有不同鍵綁定的不同程序。

在 zsh 中,您可以看到所有命令(外部、內置、函式、別名甚至關鍵字…)的列表:

type -m '*'

只是他們的名字:

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

或者僅用於外部命令的名稱:

print -rlo -- $commands:t | less

$commands是一個包含所有外部命令的數組。歷史修飾符 :t截斷命令路徑的目錄部分(僅保留尾部)。以字母順序print -rlo列印它們**,行**一個。

更長,但不那麼神秘:

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

(我在這裡列出的所有命令都假定命令路徑中沒有“異常”字元。)

引用自:https://unix.stackexchange.com/questions/304427