$ PATHのすべてのバイナリを一覧表示

$ PATHのすべてのバイナリを一覧表示

Bashの$ PATHにあるすべての実行可能ファイルをリストするコード行はありますか?

答え1

これは答えではありませんが、実行できるバイナリとコマンドを示しています。

compgen -c

(仮説bash

その他の便利なコマンド

compgen -a # will list all the aliases you could run.
compgen -b # will list all the built-ins you could run.
compgen -k # will list all the keywords you could run.
compgen -A function # will list all the functions you could run.
compgen -A function -abck # will list all the above in one go.

答え2

zshを使う:

whence -pm '*'

または:

print -rC1 -- $commands

(複数のコンポーネントに表示されるコマンドの場合、最初のコンポーネントのみが一覧表示さ$PATHれます。)

完全なパスなしでコマンドを希望し、より良い測定のためにソートするには、次のようにします。

print -rC1 -- ${(ko)commands}

(つまり、対応する連想配列の値ではなくキーを取得します。)

答え3

POSIXシェルでは、最終ソート以外の外部コマンド(printfフォールバックがない場合は組み込みと仮定)を使用せず、実行可能ファイル名に改行文字が含まれていないとします。echo

{ set -f; IFS=:; for d in $PATH; do set +f; [ -n "$d" ] || d=.; for f in "$d"/.[!.]* "$d"/..?* "$d"/*; do [ -f "$f" ] && [ -x "$f" ] && printf '%s\n' "${f##*/}"; done; done; } | sort

空のコンポーネント$PATH.オーバーライドを使用)、で始まるコンポーネント-、PATHコンポーネント、または実行可能ファイル名にワイルドカードがなく、で始まる実行可能ファイルがない\[?*場合は、.次のように単純化できます。

{ IFS=:; for d in $PATH; do for f in $d/*; do [ -f $f ] && [ -x $f ] && echo ${f##*/}; done; done; } | sort

POSIXを使用しfindて、次のようにしますsed

{ IFS=:; set -f; find -H $PATH -prune -type f -perm -100 -print; } | sed 's!.*/!!' | sort

パスにまれに実行できない場合や、非正規ファイルを一覧表示したい場合は、より簡単な方法があります。

{ IFS=:; ls -H $PATH; } | sort

これはドットファイルをスキップします。必要に応じてその-Aフラグを追加するか(ls存在する場合)、POSIXを引き続き使用するには、次のようにします。ls -aH $PATH | grep -Fxv -e . -e ..

より簡単な解決策がありますバッシュからそしてzshから

答え4

私はこれを思い出しました:

IFS=':';for i in $PATH; do test -d "$i" && find "$i" -maxdepth 1 -executable -type f -exec basename {} \;; done

編集する:これは、Apacheユーザーがbinディレクトリ内の特定のファイルを読み取るときにSELinux警告をトリガーしない唯一のコマンドのようです。

関連情報