Bash 使用路径名打印所有命令

Bash 使用路径名打印所有命令,bash,bash-completion,Bash,Bash Completion,我试图在一个可以从bash访问的系统上打印所有程序文件名。(如小路) 我一直在使用“which$(compgen-c)”,但这似乎并不有效。有更好的方法吗?这似乎更快: IFS=: read -ra __ <<< "$PATH" find "${__[@]}" -mindepth 1 -maxdepth 1 -xtype f -executable 如果命令有空格,请在子shell中使用IFS=$'\n': ( IFS=$'\n'; type -P $(compgen -c

我试图在一个可以从bash访问的系统上打印所有程序文件名。(如小路) 我一直在使用“which$(compgen-c)”,但这似乎并不有效。有更好的方法吗?

这似乎更快:

IFS=: read -ra __ <<< "$PATH"
find "${__[@]}" -mindepth 1 -maxdepth 1 -xtype f -executable
如果命令有空格,请在子shell中使用
IFS=$'\n'

( IFS=$'\n'; type -P $(compgen -c | awk '!a[$0]++'); )
禁用路径名扩展也可能更安全:

( IFS=$'\n'; set -o noglob; type -P $(compgen -c | awk '!a[$0]++'); )
同时保存到阵列:

IFS=$'\n' read -rd '' -a __ < <(compgen -c | awk '!a[$0]++')
type -P "${__[@]}"
IFS=$'\n'read-rd'-a<
IFS=$'\n' read -rd '' -a __ < <(compgen -c | awk '!a[$0]++')
type -P "${__[@]}"