Kodokon kodokon.com

Kommandozeilen-Skripte: Argumente, Umgebung und Exit-Codes

Du schreibst Skripte, die mit process.argv Argumente entgegennehmen, Umgebungsvariablen lesen und einen Exit-Code zurückgeben.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Du verwendest schon Kommandozeilen-Programme: node, npm, git und so weiter. Jedes nimmt Argumente entgegen, also die nach seinem Namen eingetippten Wörter, die sein Verhalten ändern. Schreiben wir unser eigenes. Node stellt das globale Objekt process bereit, das das gerade laufende Programm beschreibt - bei process.version bist du ihm schon begegnet. Seine Eigenschaft process.argv ist ein Array, das Folgendes enthält: an Index 0 den Pfad zu Node, an Index 1 den Pfad zu deinem Skript und ab Index 2 die tatsächlich vom Nutzer eingetippten Argumente.

JAVASCRIPT
console.log(process.argv);

const args = process.argv.slice(2);
console.log("Your arguments:", args);
Speichere diesen Code in args.js und führe dann node args.js apple pear aus: slice(2) isoliert die nützlichen Argumente.

Eine zweite Informationsquelle: die Umgebungsvariablen. Das sind Name/Wert-Paare, die das System dem Programm beim Start mitgibt. Sie dienen der Konfiguration: ein geheimer API-Schlüssel, der Debug-Modus, die Adresse einer Datenbank und so weiter. Du liest sie im Objekt process.env. Eine fehlende Variable ist undefined: Sieh immer einen Standardwert vor, zum Beispiel mit dem Operator ??.

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

console.log("Log level:", level);
Speichere diesen Code in config.js: Ohne definierte Variable ist das Level info.
BASH
LOG_LEVEL=debug node config.js
Unter macOS und Linux definierst du eine Variable direkt vor dem Befehl: Das Skript gibt dann debug aus.

Wenn ein Programm endet, gibt es dem System einen Exit-Code zurück: eine Zahl, die zusammenfasst, wie es gelaufen ist. Universelle Konvention: 0 bedeutet "Erfolg", jeder andere Wert meldet einen Fehler - genau das prüfen andere Werkzeuge und Skripte, um zu wissen, ob alles geklappt hat. process.exit(1) stoppt das Skript sofort mit dem Code 1. Verwende außerdem console.error für Fehlermeldungen: Es schreibt in die Fehlerausgabe (stderr), einen von der normalen Ausgabe getrennten Kanal. Bringen wir alles in einem vollständigen Skript zusammen.

JAVASCRIPT
const name = process.argv[2];

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

console.log(`Hello, ${name}!`);
Ohne Argument erklärt greet.js seine Verwendung und beendet sich mit Code 1; mit einem Namen grüßt es und endet mit Code 0.

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Wo steht in process.argv das erste vom Nutzer eingetippte Argument?
    • An Index 0
    • An Index 2
    • An Index 1
    • Immer am letzten Index
  2. Welcher Exit-Code meldet, dass ein Programm erfolgreich beendet wurde?
    • 0
    • 1
    • 200
  3. Wie liest du in einem Node-Skript die Umgebungsvariable API_KEY?
    • process.argv.API_KEY
    • env.get("API_KEY")
    • process.env.API_KEY