システムで利用可能なすべてのUnixコマンドを表示するには?

システムで利用可能なすべてのUnixコマンドを表示するには?

私は本を​​読んでいます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-?何も起こらないということです。かかとを押す場合も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コマンドパスのディレクトリ部分を切り捨てます。ティーアル)。print -rlo印刷してみてくださいアル字型ああアルファベット順ああ1個あたり1個注文ね。

より長いが、あまり神秘的ではない。

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

すべてのshスタイルシェルで動作するように調整できます。

(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シェルで機能することがわかりました。

バッシュユーザーの場合

したがって、将来の訪問者にシェルを使用する場合は、bash上記の質問の説明に記載されているコマンドを参照して、システムで利用可能なすべてのUnixコマンドを表示します。

zshユーザーの場合

シェルを使用している場合、zshすべてのコマンドを表示する正しい方法は次のとおりです。

!(感嘆符文字)Tabを入力してキーを2回押します。

つまり、Shift+キーを押し1てからTabキーを2回押します。

これがうまくいかない場合は、GillesとSHWが他の回答で説明したトリックを参照してください。

関連情報