Проектная лаборатория

Собственный Shell

0 / 76этапов пройдено

Этап 30 · Дополнение имён файлов

Дополнение файлов во вложенных каталогах

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы добавите поддержку дополнения имён файлов во вложенных путях.

Дополнение во вложенных путях

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

Например, если есть файл path/to/file.txt, пользователь может ввести:

$ cat path/to/f<TAB>
$ cat path/to/file.txt 
#                      ^ note the trailing space

Реализация дополнения путей

Когда пользователь нажимает Tab и неполное имя файла содержит /:

  1. Разделите текст по последнему символу /:

    • Всё до последней / включительно — путь каталога.
    • Всё после неё — префикс для поиска совпадений.

    Например, в path/to/f путь каталога — path/to/, а префикс — f.

  2. Найдите в этом каталоге элементы, начинающиеся с префикса.

  3. Если совпал один элемент, замените всё неполное имя файла полным путём и добавьте пробел в конце (например, path/to/f превращается в path/to/file.txt ).

Проверки

Тестирующая система создаст файл во вложенном каталоге (например, path/to/file.txt) и запустит вашу программу следующим образом:

$ ./your_program.sh

Затем система имитирует пользовательский ввод и нажатия Tab:

$ cat path/to/f<TAB>
$ cat path/to/file.txt 

Тестирующая система проверит, что:

  • Нажатие Tab дополняет неполный путь до полного.
  • После дополненного пути добавляется пробел.

Примечания

  • Путь каталога задаётся относительно текущего рабочего каталога. Например, если текущий рабочий каталог — /home/user, а токен — path/to/f, просматривайте элементы внутри /home/user/path/to/.
  • Пока достаточно обработать случай, когда префиксу соответствует ровно один элемент. Несколько совпадений мы обработаем на следующих этапах.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init shell ./my-shell --language go

2. Откройте папку в IDE

cd ./my-shell

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage ue6

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста