Есть ли одна строка, которая будет перечислять все исполняемые файлы из $ PATH в bash.
bash
shell
path
executable
jcubic
источник
источник
in
,{
...) и псевдонимы.С зш:
Или:
(обратите внимание, что для команд, которые появляются в более чем одном компоненте
$PATH
, они будут перечислять только первый).Если вы хотите, чтобы команды без полных путей и сортировались для хорошей меры:
(то есть получить ключи этого ассоциативного массива вместо значений).
источник
В любой оболочке POSIX без использования каких-либо внешних команд (при условии,
printf
что они встроены, если не отступаютecho
), за исключением окончательной сортировки, и при условии, что ни одно исполняемое имя не содержит символа новой строки:Если у вас нет пустого компонента в
$PATH
(используйте.
вместо этого), ни компонентов, начинающихся с-
, или подстановочных знаков\[?*
в компонентах PATH или именах исполняемых файлов, и нет исполняемых файлов, начинающихся с.
, вы можете упростить это до:Использование POSIX
find
иsed
:Если вы хотите перечислить редкий неисполняемый или нестандартный файл в пути, есть гораздо более простой способ:
Это пропускает точечные файлы; если они вам нужны, добавьте
-A
флаг,ls
если он у вас есть, или если вы хотите придерживаться POSIX:ls -aH $PATH | grep -Fxv -e . -e ..
В bash и zsh есть более простые решения .
источник
$PATH
он установлен и не содержит пустых компонентов, а компоненты не похожи на предикаты поиска (или параметры ls). Некоторые из них также будут игнорировать точечные файлы.yash
иzsh
в эмуляции sh).find
.-prune
помешает перечислению каталогов. Вы, вероятно, хотите-L
вместо того-H
, чтобы включить символические ссылки (общие для исполняемых файлов).-perm -100
не дает никаких гарантий, что файл будет исполняемым вами (и может (маловероятно) исключить исполняемые файлы).Я придумал это:
РЕДАКТИРОВАТЬ : Кажется, что это единственная команда, которая не вызывает предупреждение SELinux при чтении некоторых файлов в каталоге bin пользователем apache.
источник
for
?IFS=:; find $PATH -maxdepth 1 -executable -type f -printf '%f\n'
$PATH
это установлено и не содержит подстановочных знаков и не содержит пустых компонентов. Это также предполагает реализацию GNUfind
.-type f
вместо (специфичного для GNU)-xtype f
, это также пропустит символические ссылки. Это также не будет перечислять содержимое$PATH
компонентов, которые являются символическими ссылками.Как насчет этого
Подстановка строк используется с Bash.
источник
$PATH
установлено, не содержит подстановочных или пустых символов, не содержит пустых компонентов. Это предполагает и GNU find. Обратите внимание, что${var//x/y}
этоksh
синтаксис (также поддерживается zsh и bash). Строго говоря, это также предполагает, что компоненты $ PATH также не являютсяfind
предикатами.$PATH
компоненты не являются символическими ссылками.IFS=:
является более надежной, чем выполнение этой замены. Пути с пробелами не так уж редки в Windows. Символические ссылки довольно распространены, но это легко решается с помощью-H
.Если вы можете запустить python в своей оболочке, то можно использовать следующую (до смешного длинную) однострочную строку:
Для меня это было в основном забавное упражнение, чтобы посмотреть, можно ли это сделать, используя одну строку кода Python, не прибегая к использованию функции 'exec'. В более читаемой форме и с некоторыми комментариями код выглядит следующим образом:
источник
источник