Pausa skript med "Tryck vilken tangent som helst" i Bash, CMD, PowerShell och macOS

Vilken som helst tangent för paus i Bash, CMD, PowerShell och macOS.

Sidinnehåll

Batch-filer och skript behöver ofta en kort paus så att ett fönster som öppnats med dubbelklick eller en installationslogg syns. Windows CMD har ett dedikerat pause-kommando. Unix-shells använder read.

PowerShell ligger emellan och kräver ett uttryckligt mönster.

Denna sida samlar portabla kodbiter och de vanligaste fallgroparna (pipar, SSH utan TTY, CI).

Terminalfönster — pausfrågor i Bash, CMD och PowerShell

För fler shell-referenser, se Bash-snabbreferens och PowerShell-snabbreferens.

För bredare arbetsflöden för verktyg, besök Utvecklareverktyg: Den kompletta guiden till moderna utvecklingsarbetsflöden.

När ska man pausa (och när inte)

Använd en paus när en människa tittar på ett interaktivt terminalfönster och du vill undvika ett omedelbart avbrott – till exempel efter att en .bat-fil dubbelklickats på, eller efter att ett lokalt underhållsskript skrivit ut en sammanfattning.

Hoppa över pauser i cron, systemd-tjänster, CI-pipelines och de flesta SSH-enkellinjer. Det finns ofta ingen tangentbord ansluten och stdin kan inte vara en terminal, så att vänta på inmatning kan hänga för alltid. I Bash och POSIX sh, testa med [ -t 0 ] (eller test -t 0) innan du frågar.

Windows CMD

Kommandot pause skriver ut en lokaliserad rad som “Tryck vilken tangent som helst för att fortsätta . . .” och väntar på ett tangenttryck.

:: spara som pause-demo.bat
@echo off
echo Hej från CMD
pause

Om utdata omdirigeras kan beteendet skilja sig åt; för skript som måste köras med loggning till en fil, överväg timeout /t N för en tidsbaserad fördröjning istället för en interaktiv paus.

choice är användbart när du vill ha en tidsbaserad väntan eller specifika tangenttryck (menyskript). Det är ett separat ämne från pause men dyker ofta upp i samma batch-arbetsflöden.

PowerShell

PowerShell har ingen enskild pause-alias som matchar CMD i alla värdar. Två vanliga mönster följer.

Vänta endast på Enter

Enkelt och fungerar i många värtar inklusive vissa IDE:er.

# pause-demo.ps1
Read-Host 'Tryck Enter för att fortsätta'

Detta är inte “vilken tangent som helst” – endast Enter räknas.

Vänta på vilken tangent som helst (Windows-konsol)

I Windows PowerShell som körs i en vanlig konsolvärd, väntar ReadKey på en fysisk tangent:

# pause-any-key.ps1
Write-Host 'Tryck vilken tangent som helst för att fortsätta...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')

Om $Host.UI eller RawUI inte är tillgängligt (vissa icke-interaktiva värdar, fjärrstyrning eller begränsade miljöer) kan detta misslyckas. Innesluta sådana anrop i try / catch eller detektera [Console]::KeyAvailable / värdkapacitet när du behöver robusthet.

PowerShell 7 på icke-Windows-plattformar kanske inte erbjuder samma ReadKey-upplevelse; föredra Read-Host eller shell-inhemmigt read i sådana fall.

Bash (Linux och macOS)

Klassisk stil “vilken tangent som helst” med en synlig prompt och ingen utskrift av tangenten:

#!/usr/bin/env bash
read -r -n 1 -s -p $'Tryck vilken tangent som helst för att fortsätta...\n'
  • -n 1 — läs en tecken
  • -s — tyst (ingen utskrifter)
  • -r — rå (backstreck är inte speciellt)
  • -p — prompt-sträng

Med en vänlig skydd för automation:

#!/usr/bin/env bash
if [ -t 0 ]; then
  read -r -n 1 -s -p $'Tryck vilken tangent som helst för att fortsätta...\n'
fi

Obs för macOS

Terminal.app och iTerm2 beter sig som andra Unix-terminaler för Bash. Apples standardlogin-shell är ofta Zsh; för interaktivt Zsh kan du använda read -k 1 i skript som explicit körs av Zsh. För maximal portabilitet över Linux och macOS, stanna med Bash eller dokumentera #!/usr/bin/env bash högst upp i skriptet.

POSIX sh (portabel “tryck Enter”)

POSIX read kräver inte read -n, vilket inte är POSIX. Det portabla mönstret är “tryck Enter för att fortsätta”:

#!/bin/sh
printf 'Tryck Enter för att fortsätta... '
read -r _

Detta är brett stött på dash, ksh och ash-baserade system. Sanna enkelta “vilken tangent som helst” utan Bash-tillägg är mer krångligt; om du behöver det på minimala sh, dokumentera Bash eller använd stty-baserade tillvägagångssätt med omsorg (terminaltillstånd, portabilitet).

Plattformsoverbryggande grenar

Installationskript grenar ibland på operativsystem:

  • Windows CMDpause
  • PowerShellReadKey eller Read-Host
  • Unixread med [ -t 0 ]-skydd

I blandade miljöer, behåll skyddet “endast interaktivt” så att servrar och CI aldrig blockeras.

Relaterad läsning

Användbara länkar

  • GNU Bash-manual — Bash Builtinsread
  • Microsoft Learn — Read-Host och konsol-API:er för avancerade värdar

Prenumerera

Få nya inlägg om system, infrastruktur och AI-ingenjörskonst.