Scripten met 'Druk op een toets' pauzeren in Bash, CMD, PowerShell en macOS

Pauzeren op elke toets voor Bash, CMD, PowerShell en macOS.

Inhoud

Batch-bestanden en shell-scripts hebben vaak een korte wachttijd nodig zodat een met dubbelklik geopend venster of installatie-logboek zichtbaar blijft. Windows CMD heeft een dedicated pause-commando. Unix-shells gebruiken read.

PowerShell bevindt zich hierin het midden en vereist een expliciete aanpak.

Deze pagina verzamelt portable codefragmenten en de gebruikelijke valkuilen (pipes, SSH zonder TTY, CI).

Terminalvensters — pauzeprompts in Bash, CMD en PowerShell

Voor meer shell-referenties, zie de Bash-cheatsheet en PowerShell-cheatsheet.

Voor bredere tooling-workflows, bezoek Developer Tools: De complete gids voor moderne ontwikkelworkflows.

Wanneer pauzeren (en wanneer niet)

Gebruik een pauze wanneer een mens een interactieve terminal bekijkt en je een direct afsluiten wilt voorkomen—bijvoorbeeld na het dubbelklikken op een .bat-bestand, of nadat een lokaal onderhoudsscript een samenvatting heeft afgedrukt.

Sla pauzes over in cron, systemd-services, CI-pipelines en de meeste SSH-one-liners. Vaak is er geen toetsenbord aangesloten en is stdin mogelijk geen terminal, waardoor het wachten op input voor eeuwig kan blijven hangen. In Bash en POSIX sh, test met [ -t 0 ] (of test -t 0) voordat je om input vraagt.

Windows CMD

Het pause-commando drukt een gelokaliseerde regel af zoals “Druk op een toets om door te gaan . . .” en wacht op een toetsaanslag.

:: opslaan als pause-demo.bat
@echo off
echo Hallo van CMD
pause

Als output wordt omgeleid, kan het gedrag verschillen; voor scripts die naar een bestand moeten worden gelogd, overweeg timeout /t N voor een getimde vertraging in plaats van een interactieve pauze.

choice is handig als je een getimde wachttijd of specifieke toetsen wilt (menu-scripts). Het is een apart onderwerp dan pause maar komt vaak voor in dezelfde batch-workflows.

PowerShell

PowerShell heeft geen enkele pause-alias die in elke host overeenkomt met CMD. Twee veelvoorkomende patronen volgen.

Wachten op Enter alleen

Eenvoudig en werkt in veel hosts, inclusief sommige IDE’s.

# pause-demo.ps1
Read-Host 'Druk op Enter om door te gaan'

Dit is niet “elke toets”—alleen Enter telt.

Wachten op elke toets (Windows-console)

In Windows PowerShell die in een normale consolehost draait, wacht ReadKey op een fysieke toets:

# pause-any-key.ps1
Write-Host 'Druk op een toets om door te gaan...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')

Als $Host.UI of RawUI niet beschikbaar is (sommige niet-interactieve hosts, remote-sessies of beperkte omgevingen), kan dit mislukken. Pak dergelijke aanroepen in try / catch of detecteer [Console]::KeyAvailable / host-mogelijkheden als je robuustheid nodig hebt.

PowerShell 7 op niet-Windows-platforms biedt mogelijk niet dezelfde ReadKey-ervaring; geef de voorkeur aan Read-Host of shell-native read in die gevallen.

Bash (Linux en macOS)

Klassieke “elke toets”-stijl met een zichtbare prompt en zonder echo van de toets:

#!/usr/bin/env bash
read -r -n 1 -s -p $'Druk op een toets om door te gaan...\n'
  • -n 1 — lees één karakter
  • -s — stil (geen echo)
  • -r — raw (backslash niet speciaal)
  • -p — prompt-string

Met een vriendelijke bewaker voor automatisering:

#!/usr/bin/env bash
if [ -t 0 ]; then
  read -r -n 1 -s -p $'Druk op een toets om door te gaan...\n'
fi

macOS-opmerkingen

Terminal.app en iTerm2 gedragen zich als andere Unix-terminals voor Bash. Apple’s standaard login-shell is vaak Zsh; voor interactieve Zsh kun je read -k 1 gebruiken in scripts die expliciet door Zsh worden uitgevoerd. Voor maximale portabiliteit over Linux en macOS, blijf bij Bash of documenteer #!/usr/bin/env bash bovenaan het script.

POSIX sh (portabel “druk op Enter”)

POSIX read vereist geen read -n, wat niet POSIX is. Het portabele patroon is “druk op Enter om door te gaan”:

#!/bin/sh
printf 'Druk op Enter om door te gaan... '
read -r _

Dit is breed ondersteund op dash, ksh en ash-gebaseerde systemen. Echte één-karakter “elke toets” zonder Bash-extensies is rommeliger; als je dit nodig hebt op minimale sh, documenteer Bash of gebruik stty-gebaseerde benaderingen met zorg (terminal-toestand, portabiliteit).

Cross-platform vertakking

Installer-scripts vertakken soms op OS:

  • Windows CMDpause
  • PowerShellReadKey of Read-Host
  • Unixread met [ -t 0 ] bewaker

In gemengde omgevingen, behoud de “alleen interactief” bewaker zodat servers en CI nooit blokkeren.

Gerelateerde lectuur

  • GNU Bash-handleiding — Bash Builtinsread
  • Microsoft Learn — Read-Host en console-API’s voor geavanceerde hosts

Abonneren

Ontvang nieuwe berichten over systemen, infrastructuur en AI-engineering.