Если вам нужен список исполняемых файлов, find
будет достаточно:
IFS=':'
find $PATH -type f '(' -perm -u+x -o -perm -g+x -o -perm -o+x ')'
Это перечислит полный путь каждого исполняемого файла в ваш $ PATH
. IFS = ':'
обеспечивает разделение $ PATH
на двоеточия (:
), разделитель для этой переменной.
Если вам не нужен полный путь , а только имена исполняемых файлов , вы можете сделать
IFS=':'
find $PATH -type f '(' -perm -u+x -o -perm -g+x -o -perm -o+x ')' -exec basename {} \; | sort
Если ваш find
совместим с GNU , условие немного упрощается:
IFS=':'
find $PATH -type f -executable -exec basename {} \; | sort
Как указывает @StephenHarris, с этим есть небольшая проблема: если есть подкаталоги вашего $ PATH
, файлы в этих подкаталогах могут быть зарегистрированы даже хотя $ PATH
не может связаться с ними. Чтобы обойти это, вам на самом деле понадобится find
с большим количеством параметров, чем требует POSIX.GNU-совместимый может обойти это с помощью:
IFS=':'
find $PATH -maxdepth 1 -type f -executable -exec basename {} \; | sort
-maxdepth 1
сообщает find
не входить ни в один из этих подкаталогов.