Skripte mit „Drücke eine beliebige Taste" in Bash, CMD, PowerShell und macOS pausieren
Pausierung mit beliebiger Taste für Bash, CMD, PowerShell und macOS.
Batch-Dateien und Shell-Skripte benötigen oft eine kurze Verzögerung, damit ein per Doppelklick geöffnetes Fenster oder ein Installer-Log sichtbar bleibt. Windows CMD verfügt über einen speziellen pause-Befehl. Unix-Shell-Umgebungen nutzen read.
PowerShell liegt in der Mitte und benötigt ein explizites Muster.
Diese Seite sammelt portable Code-Snippets und erläutert die üblichen Fallstricke (Pipelines, SSH ohne TTY, CI).

Für weitere Shell-Referenzen siehe das Bash Cheat Sheet und das PowerShell Cheat Sheet.
Für umfassendere Tooling-Workflows besuchen Sie Developer Tools: Der umfassende Leitfaden für moderne Entwicklungs-Workflows.
Wann pausieren (und wann nicht)
Verwenden Sie eine Pause, wenn ein Mensch ein interaktives Terminal beobachtet und Sie einen sofortigen Abbruch vermeiden möchten – beispielsweise nach einem per Doppelklick ausgeführten .bat-Datei oder nach einem lokalen Wartungsskript, das eine Zusammenfassung ausgibt.
Überspringen Sie Pausen in cron, systemd-Diensten, CI-Pipelines und den meisten SSH-One-Linern. Oft ist keine Tastatur angeschlossen und stdin ist möglicherweise kein Terminal, sodass das Warten auf Eingaben ewig hängen bleiben kann. In Bash und POSIX sh testen Sie dies mit [ -t 0 ] (oder test -t 0), bevor Sie nach Eingabe fragen.
Windows CMD
Der Befehl pause gibt eine lokalisierte Zeile wie „Drücken Sie eine beliebige Taste, um fortzufahren . . ." aus und wartet auf einen Tastendruck.
:: speichern als pause-demo.bat
@echo off
echo Hallo von CMD
pause
Wenn die Ausgabe umgeleitet wird, kann sich das Verhalten unterscheiden; für Skripte, die in eine Datei protokolliert werden müssen, sollten Sie timeout /t N für eine zeitgesteuerte Verzögerung statt einer interaktiven Pause verwenden.
choice ist nützlich, wenn Sie eine zeitgesteuerte Wartezeit oder bestimmte Tasten benötigen (Menü-Skripte). Es ist ein separates Thema von pause, erscheint aber oft in denselben Batch-Workflows.
PowerShell
PowerShell verfügt über keine einzelne pause-Alias, die in jeder Host-Umgebung mit CMD übereinstimmt. Es folgen zwei gängige Muster.
Nur auf Enter warten
Einfach und funktioniert in vielen Hosts, einschließlich einiger IDEs.
# pause-demo.ps1
Read-Host 'Drücken Sie Enter, um fortzufahren'
Dies ist keine „beliebige Taste" – nur Enter zählt.
Auf beliebige Taste warten (Windows-Konsole)
In Windows PowerShell, die in einem normalen Konsolen-Host läuft, wartet ReadKey auf eine physische Taste:
# pause-any-key.ps1
Write-Host 'Drücken Sie eine beliebige Taste, um fortzufahren...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
Wenn $Host.UI oder RawUI nicht verfügbar ist (einige nicht-interaktive Hosts, Remote-Zugriff oder eingeschränkte Umgebungen), kann dies fehlschlagen. Wrappen Sie solche Aufrufe in try / catch oder prüfen Sie [Console]::KeyAvailable / Host-Fähigkeiten, wenn Sie Robustheit benötigen.
PowerShell 7 auf Nicht-Windows-Plattformen bietet möglicherweise nicht das gleiche ReadKey-Erlebnis; bevorzugen Sie in diesen Fällen Read-Host oder das shell-eigene read.
Bash (Linux und macOS)
Klassischer „beliebige Taste"-Stil mit sichtbarer Aufforderung und ohne Echo der Taste:
#!/usr/bin/env bash
read -r -n 1 -s -p $'Drücken Sie eine beliebige Taste, um fortzufahren...\n'
-n 1— ein Zeichen lesen-s— still (kein Echo)-r— roh (Backslash nicht speziell)-p— Prompt-Zeichenfolge
Mit einem freundlichen Schutz für die Automatisierung:
#!/usr/bin/env bash
if [ -t 0 ]; then
read -r -n 1 -s -p $'Drücken Sie eine beliebige Taste, um fortzufahren...\n'
fi
Hinweise zu macOS
Terminal.app und iTerm2 verhalten sich wie andere Unix-Terminals für Bash. Die Standard-Login-Shell von Apple ist oft Zsh; für interaktives Zsh können Sie in Skripten, die explizit von Zsh ausgeführt werden, read -k 1 verwenden. Für maximale Portabilität zwischen Linux und macOS bleiben Sie bei Bash oder dokumentieren Sie #!/usr/bin/env bash oben im Skript.
POSIX sh (portables „Enter drücken")
POSIX read benötigt nicht read -n, was nicht POSIX-konform ist. Das portable Muster lautet „Drücken Sie Enter, um fortzufahren":
#!/bin/sh
printf 'Drücken Sie Enter, um fortzufahren... '
read -r _
Dies ist auf Systemen mit dash, ksh und ash weit verbreitet. Ein echtes „beliebige Taste"-Muster für ein einzelnes Zeichen ohne Bash-Erweiterungen ist umständlicher; wenn Sie dies auf minimalem sh benötigen, dokumentieren Sie Bash oder verwenden Sie stty-basierte Ansätze mit Vorsicht (Terminalzustand, Portabilität).
Plattformübergreifende Verzweigung
Installer-Skripte verzweigen manchmal nach Betriebssystem:
- Windows CMD —
pause - PowerShell —
ReadKeyoderRead-Host - Unix —
readmit[ -t 0 ]-Schutz
In gemischten Umgebungen behalten Sie den „nur interaktiv"-Schutz bei, damit Server und CI niemals blockieren.
Verwandte Lektüre
- Bash Cheat Sheet — allgemeine Befehlsreferenz
- PowerShell Cheat Sheet — Cmdlets und tägliche Nutzung
Nützliche Links
- GNU Bash-Handbuch — Bash Builtins —
read - Microsoft Learn — Read-Host und Konsolen-APIs für fortgeschrittene Hosts