Проектная лаборатория
Собственный Shell
Этап 07 · Основные этапы
Поиск исполняемых файлов
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы расширите встроенную команду type для поиска исполняемых файлов с помощью PATH.
Переменная окружения PATH
Переменная окружения PATH задаёт список каталогов, в которых оболочка должна искать исполняемые программы.
Например, если PATH имеет значение /dir1:/dir2:/dir3, оболочка ищет исполняемые файлы сначала в /dir1, затем в /dir2 и наконец в /dir3, именно в таком порядке.
Поиск исполняемых файлов
Когда type получает имя команды, оболочка должна выполнить следующие шаги:
- Проверить, является ли команда встроенной (например,
exitилиecho). Если да, сообщить об этом (<command> is a shell builtin) и остановиться. - Если команда не встроенная, пройти по всем каталогам в PATH. Для каждого каталога:
- Проверить, существует ли файл с именем команды.
- Проверить, имеет ли файл разрешение на выполнение.
- Если файл существует и имеет разрешение на выполнение, вывести
<command> is <full_path>и остановиться. - Если файл существует, но не имеет разрешения на выполнение, пропустить его и перейти к следующему каталогу.
- Если исполняемый файл не найден ни в одном каталоге, вывести
<command>: not found.
Например:
$ type grep
grep is /usr/bin/grep
$ type invalid_command
invalid_command: not found
$ type echo
echo is a shell builtinПроверки
Тестирующая система запустит вашу программу с собственным PATH следующим образом:
PATH="/usr/bin:/usr/local/bin:$PATH" ./your_program.shЗатем система отправит оболочке последовательность команд type:
$ type ls
ls is /usr/bin/ls
$ type valid_command
valid_command is /usr/local/bin/valid_command
$ type invalid_command
invalid_command: not found
$Тестирующая система проверит, что команда type правильно определяет исполняемые файлы в PATH:
- Исполняемые файлы из PATH отображаются с полным путём (
<command> is <full_path>). - Файлы без разрешения на выполнение пропускаются.
- Для несуществующих команд выводится сообщение
<command>: not found.
Примечания
-
Можно использовать exec.LookPath или самостоятельно реализовать обход PATH.
-
PATH может включать каталоги, отсутствующие на диске, поэтому ваш код должен корректно обрабатывать такие случаи.
-
При разборе переменной окружения PATH помните, что разделитель (обычно
:или;) может зависеть от операционной системы. Чтобы правильно разделить каталоги, используйте независимые от ОС средства работы с путями вашего языка (например,os.pathsepв Python,File.pathSeparatorв Java илиpath.delimiterв Node.js).
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init shell ./my-shell --language go2. Откройте папку в IDE
cd ./my-shellРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage mg5Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.