Pauzowanie skryptów z komunikatem „Wciśnij dowolny klawisz” w Bash, CMD, PowerShell oraz macOS
Wstrzymywanie klawiszem dowolnym dla Bash, CMD, PowerShell i macOS.
Pliki wsadowe i skrypty powłoki często wymagają krótkiej pauzy, aby okno uruchomione przez podwójne kliknięcie lub log instalatora pozostał widoczny. Wiersz poleceń Windows CMD posiada dedykowane polecenie pause. Powłoki Unixowe używają polecenia read.
PowerShell znajduje się w połowie i wymaga jawnego wzorca.
Ta strona gromadzi przenośne fragmenty kodu oraz typowe pułapki (przypisywanie potoków, SSH bez terminala, CI).

Więcej informacji o powłokach znajdziesz w ściągce Bash oraz ściągce PowerShell.
Aby uzyskać szersze informacje o przepływach pracy narzędzi, odwiedź stronę Narzędzia dla programistów: Kompletny przewodnik po nowoczesnych przepływach pracy.
Kiedy stosować pauzę (a kiedy nie)
Używaj pauzy, gdy człowiek obserwuje interaktywny terminal i chcesz uniknąć natychmiastowego zamknięcia – na przykład po uruchomieniu pliku .bat przez podwójne kliknięcie lub po tym, jak lokalny skrypt konserwacyjny wyświetli podsumowanie.
Pomiń pauzy w cron, usługach systemd, potokach CI oraz większości jedno-wierszowych poleceń SSH. Często nie jest podpięta klawiatura, a stdin może nie być terminalem, więc oczekiwanie na wejście może zakończyć się zawieszeniem na zawsze. W Bash i POSIX sh, przed wyświetleniem prośby sprawdź warunek za pomocą [ -t 0 ] (lub test -t 0).
Windows CMD
Polecenie pause wyświetla zlokalizowaną linię, taką jak „Naciśnij dowolny klawisz, aby kontynuować . . ." i czeka na naciśnięcie klawisza.
:: zapisz jako pause-demo.bat
@echo off
echo Witaj z CMD
pause
Jeśli wyjście jest przekierowane, zachowanie może się różnić; w przypadku skryptów, które muszą być rejestrowane w pliku, rozważ użycie timeout /t N jako opóźnienia czasowego zamiast interaktywnej pauzy.
Polecenie choice jest przydatne, gdy chcesz opóźnienia czasowego lub czekania na konkretne klawisze (skrypty menu). Jest to temat odrębny od pause, ale często pojawia się w tych samych przepływach pracy wsadowych.
PowerShell
PowerShell nie posiada jednego aliasu pause, który pasuje do CMD we wszystkich hostach. Poniżej przedstawiono dwa powszechne wzorce.
Czekanie tylko na Enter
Proste i działa w wielu hostach, w tym niektórych IDE.
# pause-demo.ps1
Read-Host 'Naciśnij Enter, aby kontynuować'
To nie jest „dowolny klawisz" – liczy się tylko Enter.
Czekanie na dowolny klawisz (konsola Windows)
W Windows PowerShell uruchomionym w normalnym hostach konsoli, ReadKey czeka na fizyczny klawisz:
# pause-any-key.ps1
Write-Host 'Naciśnij dowolny klawisz, aby kontynuować...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
Jeśli $Host.UI lub RawUI są niedostępne (niektóre hosty nieinteraktywne, zdalny dostęp lub środowiska ograniczone), może to zakończyć się błędem. OTO takie wywołania w blokach try / catch lub wykryj możliwości hosta za pomocą [Console]::KeyAvailable, gdy potrzebujesz niezawodności.
PowerShell 7 na platformach innych niż Windows może nie oferować tego samego doświadczenia z ReadKey; w takich przypadkach preferuj Read-Host lub native’owe polecenie powłoki read.
Bash (Linux i macOS)
Klasyczny styl „dowolny klawisz" z widocznym podpowiedzią i bez echa klawisza:
#!/usr/bin/env bash
read -r -n 1 -s -p $'Naciśnij dowolny klawisz, aby kontynuować...\n'
-n 1— czytaj jeden znak-s— cichy (bez echa)-r— surowy (backslash nie jest specjalny)-p— ciąg podpowiedzi
Z przyjazną ochroną dla automatyzacji:
#!/usr/bin/env bash
if [ -t 0 ]; then
read -r -n 1 -s -p $'Naciśnij dowolny klawisz, aby kontynuować...\n'
fi
Uwagi dotyczące macOS
Terminal.app i iTerm2 zachowują się jak inne terminale Unixa w przypadku Bash. Domyślną powłoką logowania w macOS jest często Zsh; w interaktywnym Zsh możesz użyć read -k 1 w skryptach uruchomionych jawnie przez Zsh. Dla maksymalnej przenośności między Linuxem a macOS, używaj Bash lub dokumentuj #!/usr/bin/env bash na początku skryptu.
POSIX sh (przenośne „naciśnij Enter")
POSIX read nie wymaga read -n, co nie jest zgodne z POSIX. Przenośny wzorzec to „naciśnij Enter, aby kontynuować":
#!/bin/sh
printf 'Naciśnij Enter, aby kontynuować... '
read -r _
Jest to szeroko wspierane na systemach opartych na dash, ksh i ash. Prawdziwe „dowolny klawisz" w jednym znaku bez rozszerzeń Bash jest bardziej skomplikowane; jeśli potrzebujesz tego na minimalnym sh, dokumentuj Bash lub używaj podejść opartych na stty z ostrożnością (stan terminala, przenośność).
Rozgałęzienia wieloplatformowe
Skrypty instalacyjne czasami rozgałęziają się w zależności od systemu operacyjnego:
- Windows CMD —
pause - PowerShell —
ReadKeylubRead-Host - Unix —
readz ochroną[ -t 0 ]
W środowiskach mieszanych zachowaj ochronę „tylko interaktywna", aby serwery i CI nigdy nie blokowały się.
Powiązane lektury
- Ściąga Bash — ogólne odniesienie do poleceń
- Ściąga PowerShell — cmdlety i codzienne użycie
Przydatne linki
- Dokumentacja GNU Bash — Bash Builtins —
read - Microsoft Learn — Read-Host i API konsoli dla zaawansowanych hostów