TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

Die Shell-Variable `$OSTYPE` zur Betriebssystemerkennung verwenden

July 3, 2020

Die Variable $OSTYPE ist eine in vielen Shells (einschließlich Bash und Zsh) vordefinierte Variable, die eine schnelle Erkennung des zugrunde liegenden Betriebssystems ermöglicht. Obwohl sie nicht Teil des POSIX-Standards ist, ist sie für Skripte, die primär für diese Shells geschrieben werden, eine bequeme Alternative zum uname-Befehl.


1. Typische $OSTYPE-Werte

Der genaue Wert kann zwischen verschiedenen Systemen und Shell-Versionen variieren, folgt aber einem gängigen Muster.

  • Linux: linux-gnu
  • macOS: darwin21.1.0 (die Version kann abweichen)
  • Windows (mit Git Bash/MSYS): msys
  • Windows (mit Cygwin): cygwin
  • FreeBSD: freebsd13.0

Aufgrund der variierenden Versionsnummern (z.B. bei darwin*) ist es wichtig, beim Vergleich Wildcards zu verwenden.


2. Robuste Abfrage mit case

Eine case-Anweisung in Kombination mit Wildcard-Mustern (*) ist die sicherste Methode, um $OSTYPE auszuwerten.

code
#!/usr/bin/env bash

case "$OSTYPE" in
  linux*)
    echo "Dies ist ein Linux-System."
    ;;
  darwin*)
    echo "Dies ist ein macOS-System."
    ;;
  cygwin* | msys*)
    echo "Dies ist ein Windows-System (Cygwin/MSYS)."
    ;;
  *)
    echo "Unbekanntes Betriebssystem: $OSTYPE"
    ;;
esac

3. Vergleich: $OSTYPE vs. uname

Eigenschaft$OSTYPEuname -s
TypShell-Variable (Bash, Zsh, etc.)Externer Befehl (POSIX-Standard)
PortabilitätWeniger portabel (nicht in sh)Hochgradig portabel (funktioniert in fast allen Shells)
GeschwindigkeitGeringfügig schneller (kein Prozess-Fork)Geringfügig langsamer (startet einen neuen Prozess)
AusgabeDetaillierter (z.B. linux-gnu)Kernel-Name (z.B. Linux)

Empfehlung:

  • Verwenden Sie $OSTYPE in Skripten, die explizit für Bash oder Zsh geschrieben sind und bei denen keine maximale Portabilität erforderlich ist.
  • Verwenden Sie uname -s für Skripte, die POSIX-konform sein und auch in einfacheren Shells wie sh oder dash laufen müssen.

Fazit

Die $OSTYPE-Variable bietet eine schnelle und bequeme Möglichkeit zur Betriebssystemerkennung innerhalb von Bash- und Zsh-Skripten. Für maximale Portabilität bleibt uname jedoch das Werkzeug der Wahl. Die Kombination mit einer case-Anweisung und Wildcards sorgt in beiden Fällen für robuste und wartbare Skripte.