Проектная лаборатория
Собственный Shell
Этап 39 · Программируемое дополнение
Единственный вариант дополнения
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы вызовете зарегистрированный скрипт дополнения и используете его вывод для дополнения единственным вариантом.
Запуск скрипта дополнения
На предыдущих этапах вы регистрировали скрипты дополнения с помощью complete -C и сохраняли их. Теперь вы действительно будете их запускать.
Когда пользователь вводит имя команды, пробел и нажимает TAB, оболочка должна сначала проверить, зарегистрирован ли для этой команды скрипт дополнения. Если да:
- Запустите скрипт отдельным процессом.
- Прочитайте его stdout.
- Используйте каждую строку вывода как вариант дополнения.
Если скрипт дополнения не зарегистрирован, оболочка должна использовать существующее поведение дополнения (или ничего не делать, если другая логика дополнения пока не реализована).
На этом этапе скрипт дополнения всегда выводит ровно одну строку. Оболочка должна дополнить пользовательский ввод этой строкой и добавить пробел в конце.
Например, скрипт дополнения может быть таким простым:
#!/usr/bin/env python3
print("run")После регистрации и вызова по TAB оболочка должна запустить скрипт, прочитать его stdout и использовать вывод как дополнение:
$ complete -C /path/to/completer_script docker
$ docker <TAB>
$ docker run Проверки
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.shСистема создаст скрипт дополнения, всегда выводящий одно слово в stdout, зарегистрирует его для команды и нажмёт TAB:
$ complete -C /path/to/completer_script <command>
$ <command> <TAB>
$ <command> <candidate> Тестирующая система проверит, что:
- При нажатии TAB оболочка запускает зарегистрированный скрипт дополнения.
- Единственная строка stdout используется как дополнение.
- После дополненного слова добавляется пробел.
Примечания
- Пока не нужно передавать скрипту контекст дополнения (например, текущее вводимое слово). Это появится на следующих этапах.
- Обязательно дождитесь завершения скрипта перед вставкой дополнения, иначе можно прочитать неполный вывод.
- Скрипт дополнения может быть написан на любом языке. Оболочке достаточно выполнить его и прочитать stdout.
Проверка в вашей 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 pm5Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.