compgen -c | sort -b | uniq | less
показывает также функции и ключевые слова (к счастям нет псевдонимов), я вместо этого хочу все, что не являются ключевыми словами, функциями или псевдонимами. В нескольких словах только команды.
Если имя команды совпадает с именем функции, имя ключевого слова или имени псевдонима; Имя команды не должно быть опущено.
Для Compgen
(и я думаю, что для Linux в целом ), команда - это все, что вы можете запустить, включая псевдоним и функции и т. Д.
, если вы хотите Получите только исполняемые файлы / скрипты в любом из ваших $ PATHION
каталогов , нет хорошего способа использования Compgen
.
Вы можете использовать COMM
, чтобы показать все команды, исключая псевдоним, ключевые слова и функции:
comm -23 \
<(compgen -c | sort -u) \
<(compgen -akA function | sort -u)
Однако это также удалит команды, которые являются как псевдонимами / функцией, так и командами (например, LS
или GREP
имеют псевдоним по умолчанию в Ubuntu, а также все, что вы добавили себя).
Итак, я думаю, что вам лучше получить все исполнители от $ PATH
со своим собственным скриптом (и если вы хотите добавить встроенные
, используя COMPGEN
):
path_filenames(){
printf '%s' "$PATH" \
| xargs -d: -I{} -- find -L {} -maxdepth 1 -executable -type f -printf '%P\n' 2>/dev/null
}
sort -u <(path_filenames) <(compgen -b)
Для печати псевдонимов выполните:
alias
Для печати функций выполните:
:
declare -F
или
declare -f
Для печати команд ( за исключением псевдонимов, ключевых слов и функций), выполните:
compgen -c | \
grep -wv "$(alias | grep -oP '\w+(?=\=)')"| \
grep -wv "$(declare -F | awk '{print $3}')" | \
grep -wFv "$(compgen -k)"
grep -wv "$(псевдоним | grep -oP '\w+(? =\=)')"
исключит псевдонимы. grep -wv "$(declare -F | awk '{print $3}')"
исключит функции. grep -wFv "$(compgen -k)"
исключит ключевые слова.