bash: compgen -c не возвращает мне вывод, который я хочу

compgen -c | sort -b | uniq | less

показывает также функции и ключевые слова (к счастям нет псевдонимов), я вместо этого хочу все, что не являются ключевыми словами, функциями или псевдонимами. В нескольких словах только команды.

Если имя команды совпадает с именем функции, имя ключевого слова или имени псевдонима; Имя команды не должно быть опущено.

2
задан 2 March 2021 в 18:16

2 ответа

Для 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)
3
ответ дан 18 March 2021 в 23:29

Для печати псевдонимов выполните:

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)" исключит ключевые слова.
0
ответ дан 18 March 2021 в 23:29

Другие вопросы по тегам:

Похожие вопросы: