Как вывести список всех внутренних команд оболочки

Вопрос или проблема

Существует ли способ перечислить все внутренние команды оболочки? Я использую bash shell. Если я ввожу echo, то оболочка bash использует внутреннюю команду echo, и именно она будет выполнена (внутренние команды имеют больший приоритет, чем внешние команды). Существует ли способ перечислить все внутренние команды оболочки?

В bash есть команда compgen -b, которая перечисляет все встроенные/внутренние команды.

Все остальные команды можно найти в каталогах, указанных в переменной $PATH.

Вот скрипт для перечисления всех команд (лучше всего работает в bash):

printf "\033[7mBuilt-in Commands:\033[0m\n%s\n\n\033[7mExternal Commands:\033[0m\n%s\n" "$(compgen -b)" "$(echo "$PATH" | tr ":" "\n" | xargs -I {} ls -1 {} 2>/dev/null | sort -u)"

.

Ответ или решение

Вопрос о том, как вывести список всех внутренних команд оболочки, особенно в контексте использования Bash, представляет собой актуальную задачу для IT-специалистов, стремящихся лучше понять функциональность и управление системой. Давайте рассмотрим эту задачу, используя подход TEA (теория, пример, применение), чтобы предоставить наиболее полное и полезное объяснение.

Теория

Оболочка Bash предоставляет пользователю возможность выполнять команды и скрипты, которые могут быть либо внутренними (встроенными), либо внешними (исполняемыми программами, находящимися на файловой системе). Внутренние команды (или built-ins) выполняются непосредственно оболочкой, что делает их реализацию более быстрой и эффективной, так как не требуется создавать новый процесс. Эти команды встроены в двоичный файл Bash и могут предлагать команды управления потоком, встроенные эквиваленты утилит shell, и другие функционально уникальные инструменты.

Команды, которые находятся в файловой системе и запускаются из различным мест в системной переменной PATH, считаются внешними. Пример внутренней команды – echo, которая реализована как встроенная команда в Bash. В большинстве случаев, когда внутренняя и внешняя команды имеют одно и то же имя, внутренняя команда имеет приоритет.

Пример

Для перечисления всех встроенных команд в Bash, можно использовать команду compgen -b. Эта команда выведет список всех встроенных команд текущей сессии:

compgen -b

Другим методом является использование help в комбинации с compgen:

compgen -A builtin

Эти команды позволяют увидеть, какие внутренние команды доступны на вашей системе, и использовать их для настройки и управления процессами и задачами в Linux/Unix среде.

Применение

Теперь, перейдем к применению этих методов и созданию мощного скрипта, который не только найдет все внутренние команды в Bash, но и перечислит все доступные внешние команды в системе.

Приведенный ниже скрипт демонстрирует, как получить обширный список всех команд, который охватывает как внутренние, так и внешние команды. Он формирует структуру вывода, четко разделяя два типа команд для улучшения читаемости:

printf "\033[7mBuilt-in Commands:\033[0m\n%s\n\n\033[7mExternal Commands:\033[0m\n%s\n" \
"$(compgen -b)" \
"$(echo "$PATH" | tr ":" "\n" | xargs -I {} ls -1 {} 2>/dev/null | sort -u)"

Этот скрипт работает по следующему принципу:

  1. Вывод внутренних команд: Используя compgen -b, скрипт собирает все внутренние команды оболочки, доступные в текущей сессии.

  2. Поиск внешних команд: Переменная PATH разбивается на отдельные пути, после чего для каждого пути выполняется команда ls для получения списка всех файлов в этих директориях. Затем список сортируется и выводится.

  3. Форматирование вывода: Для ясного представления результирующие списки оформляются с использованием специальных символов для изменения стиля текста (такие как \033[7m для обратного видео), что облегчает различение между внутренними и внешними командами.

Практическое применение таких знаний особенно полезно при написании скриптов, автоматизации процессов и оптимизации системных операций. Например, понимание того, что echo в большинстве случаев будет внутренней командой, позволяет более эффективно управлять выводом данных в терминал. В ситуациях, когда требуется точность использования определенной версии команды, таких как GNU echo или специфическая утилита из PATH, можно избегать неоднозначностей, вызывая внешние команды с явным указанием пути.

Заключение

Понимание и управление внутренними и внешними командами Bash – ключ к эффективной работе в Unix-подобных системах. Предоставленные методы и скрипты позволяют не только выяснить, какие команды доступны в любой момент времени, но и развить более глубокое понимание архитектуры вашей системы и ее функциональных возможностей. Это знание бесценно для системных администраторов, разработчиков и всех, кто стремится оптимизировать свои рабочие процессы с максимальной эффективностью в настроенных Unix-системах.

Оцените материал
Добавить комментарий

Капча загружается...