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