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.

Inhaltsverzeichnis

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).

Terminal-Fenster — Pause-Aufforderungen in Bash, CMD und PowerShell

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 CMDpause
  • PowerShellReadKey oder Read-Host
  • Unixread mit [ -t 0 ]-Schutz

In gemischten Umgebungen behalten Sie den „nur interaktiv"-Schutz bei, damit Server und CI niemals blockieren.

Verwandte Lektüre

  • GNU Bash-Handbuch — Bash Builtinsread
  • Microsoft Learn — Read-Host und Konsolen-APIs für fortgeschrittene Hosts

Abonnieren

Neue Beiträge zu Systemen, Infrastruktur und KI-Engineering.