Есть ли «простой» способ запуска команды в стиле «ls -la» для вывода списка всех файлов / исполняемых файлов в текущем PATH?
(Я намереваюсь направить вывод в grep для поиска команд с неизвестными префиксами, но в основном с известными «именами», тот случай, когда автозаполнение / табуляция в bash практически бесполезны. Так что это своего рода «обратный авто полная функция "...)
bash
ls
path
autocomplete
SME
источник
источник
ls -la
?Ответы:
источник
which $(compgen -A function -abck)
?Вот функция, которая перечисляет содержимое каталогов
$PATH
. Если переданы аргументы, функция перечисляет только те команды, имя которых содержит один из аргументов. Аргументы интерпретируются как шаблоны глобуса.Как и многие вещи, это проще в Zsh.
Символ
^
в раскрытии параметра вызывает добавление текста, объединенного с массивом, к каждому элементу массива, например, кpath=(/bin /usr/bin); echo $^path/foo
отпечаткам/bin/foo /usr/bin/foo
./*$^@*
выглядит как оскорбление комиксов, но на самом деле это обычный символ/
, подстановочный знак*
, специальный параметр$@
(массив позиционных параметров) с^
модификатором и снова*
.(N:t)
является префиксом globN
для получения пустого раскрытия, если нет совпадения, за которым следует модификатор history,t
чтобы сохранить только базовое имя («tail») для каждого совпадения.Более загадочный, избегает внешнего звонка, но это только косметический интерес:
На самом деле вы можете искать
apropos
команду, которая ищет справочные страницы команд, краткое описание которых содержит ключевое слово. Ограничение состоит в том, что это находит только те команды, которые имеют справочную страницу.источник
^
похоже, не приводит к выводу для вызова «без аргументов»? Если вы уроните его, вы можете перечислить их все и по-прежнему искать отдельные ключевые слова (но не список из них).(Non:t)
Кажется, что звездочки следует расширить? Не могу понять, что последний.path
, но когда я запускаю его в оболочке, это действительно $ PATH, но с пробелами вместо:
. Остальное кристально ясно :)$path
это функция zsh: это связанный параметр , массив, который автоматически обновляется приPATH
обновлении и наоборот.поиск только соответствует тому, что: установлен хотя бы один бит "x" (исполняемый), и это не каталог.
и используйте его со списком регулярных выражений:
источник
echo $PATH | tr ':' '\n' | sort | uniq -d
сначала мы повторяем
$PATH
в sed и заменяем ":" на "".затем мы делаем поиск по каждой из этих вещей, чтобы найти файлы с помощью rwx и повторить их.
2> /dev/null
это такfind
не будет печатать ошибкиисточник
-maxdepth 1
и-type f
в вашей находке, иначе вы найдете подкаталоги и их файлы (что поиск PATH не будет). Кроме того, ваш тест на разрешение странный -+x
я думаю, просто:/bin
или/bin::/usr/bin
. Попробуйте добавитьs/::/:.:/;s/^:/.:/;s/:$/:./
вsed
команду.find
можно искать больше путей, так что вы можете делать это без цикла:find $(echo $PATH | sed -e 's/\:/\ /g') -perm +rwx …
Конечно, имена каталогов, содержащие пробелы, испортят это, но в любом случае на основе цикла есть такая же проблема.for
. Такfor
что перебираем список из 4 слов. Для того, чтобы манипулировать словом Расщепление лучше установить вIFS
соответствии с вашими потребностями:IFS=':'; find $PATH -perm +rwx …
.