Kodokon kodokon.com

Скрипты в командной строке: аргументы, окружение и коды выхода

Ты пишешь скрипты, которые принимают аргументы через process.argv, читают переменные окружения и возвращают код выхода.

8 мин · 3 вопросов

Открыть этот урок в Kodokon

Ты уже пользуешься программами командной строки: node, npm, git и так далее. Каждая из них принимает аргументы - слова, набранные после её имени, которые меняют её поведение. Напишем свою. Node предоставляет глобальный объект process, который описывает выполняющуюся сейчас программу - ты уже встречал его через process.version. Его свойство process.argv - это массив, который содержит: по индексу 0 - путь к Node; по индексу 1 - путь к твоему скрипту; а начиная с индекса 2 - аргументы, реально набранные пользователем.

JAVASCRIPT
console.log(process.argv);

const args = process.argv.slice(2);
console.log("Your arguments:", args);
Сохрани этот код в args.js, затем выполни node args.js apple pear: slice(2) выделяет полезные аргументы.

Второй источник информации - переменные окружения. Это пары имя/значение, которые система передаёт программе при запуске. Их используют для конфигурации: секретный ключ API, режим отладки, адрес базы данных и так далее. Читают их из объекта process.env. Отсутствующая переменная равна undefined: всегда предусматривай значение по умолчанию, например с помощью оператора ??.

JAVASCRIPT
const level = process.env.LOG_LEVEL ?? "info";

console.log("Log level:", level);
Сохрани этот код в config.js: если переменная не задана, уровень равен info.
BASH
LOG_LEVEL=debug node config.js
В macOS и Linux переменную задают прямо перед командой: тогда скрипт выведет debug.

Когда программа завершается, она возвращает системе код выхода: число, которое подводит итог тому, как всё прошло. Универсальное соглашение: 0 означает «успех», любое другое значение сигнализирует об ошибке - именно это проверяют другие инструменты и скрипты, чтобы понять, всё ли сработало. process.exit(1) немедленно останавливает скрипт с кодом 1. Для сообщений об ошибках используй также console.error: он пишет в поток ошибок (stderr) - канал, отдельный от обычного вывода. Соберём всё вместе в законченном скрипте.

JAVASCRIPT
const name = process.argv[2];

if (!name) {
  console.error("Usage: node greet.js <name>");
  process.exit(1);
}

console.log(`Hello, ${name}!`);
Без аргумента greet.js объясняет, как им пользоваться, и выходит с кодом 1; с именем он здоровается и завершается с кодом 0.

Проверка знаний

Убедись, что запомнил ключевые моменты этого урока.

  1. Где в process.argv находится первый аргумент, набранный пользователем?
    • По индексу 0
    • По индексу 2
    • По индексу 1
    • Всегда по последнему индексу
  2. Какой код выхода сигнализирует, что программа завершилась успешно?
    • 0
    • 1
    • 200
  3. Как прочитать переменную окружения API_KEY в скрипте на Node?
    • process.argv.API_KEY
    • env.get("API_KEY")
    • process.env.API_KEY