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.
#!/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 | $OSTYPE | uname -s |
|---|---|---|
| Typ | Shell-Variable (Bash, Zsh, etc.) | Externer Befehl (POSIX-Standard) |
| Portabilität | Weniger portabel (nicht in sh) | Hochgradig portabel (funktioniert in fast allen Shells) |
| Geschwindigkeit | Geringfügig schneller (kein Prozess-Fork) | Geringfügig langsamer (startet einen neuen Prozess) |
| Ausgabe | Detaillierter (z.B. linux-gnu) | Kernel-Name (z.B. Linux) |
Empfehlung:
- Verwenden Sie
$OSTYPEin Skripten, die explizit für Bash oder Zsh geschrieben sind und bei denen keine maximale Portabilität erforderlich ist. - Verwenden Sie
uname -sfür Skripte, die POSIX-konform sein und auch in einfacheren Shells wieshoderdashlaufen 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.