Проектная лаборатория
Собственный Shell
Этап 42 · Программируемое дополнение
Передача переменных окружения
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы будете передавать COMP_LINE и COMP_POINT как переменные окружения при вызове скрипта дополнения.
Переменные окружения дополнения
На предыдущих этапах вы передавали имя команды, текущее и предыдущее слова как аргументы скрипта дополнения. Некоторым скриптам также нужны полная командная строка и положение курсора. Перед вызовом скрипта оболочка должна установить две переменные окружения:
COMP_LINE— полный текст командной строки в момент нажатия TAB (без завершающего перевода строки).COMP_POINT— отсчитываемый от нуля байтовый индекс позиции курсора вCOMP_LINE. При нажатии TAB в конце строки это длинаCOMP_LINE.
Например, если пользователь вводит:
$ git ad<TAB>Оболочка должна установить:
COMP_LINE:git adCOMP_POINT:6(длина строкиgit ad— 6 байт, а курсор находится в конце).
Они задаются как переменные окружения процесса дополнения, наряду с аргументами argv[1], argv[2] и argv[3] из предыдущих этапов.
Проверки
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.shЗатем система зарегистрирует скрипт дополнения и вызовет дополнение:
$ complete -C /path/to/completer_script git
$ git ad<TAB>
$ git add Скрипт дополнения использует и аргументы argv, и переменные окружения, чтобы получить правильный вариант. Если COMP_LINE или COMP_POINT отсутствует или неверна, скрипт не вернёт правильный результат и дополнение не сработает.
Тестирующая система проверит, что:
COMP_LINEсодержит полный текст командной строки в момент нажатия TAB.COMP_POINTсодержит правильный байтовый индекс позиции курсора.- Результат дополнения корректен (что подтверждает правильную передачу обеих переменных окружения).
Примечания
COMP_POINT— индекс байта, а не символа. Для ASCII-ввода они совпадают, но различие важно при обработке многобайтовых символов.- Эти переменные окружения следует задавать только для процесса дополнения, не сохраняя в окружении самой оболочки.
Проверка в вашей 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 nr7Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.