Pausar Scripts com "Pressione Qualquer Tecla" no Bash, CMD, PowerShell e macOS

Pausa em qualquer tecla para Bash, CMD, PowerShell e macOS.

Conteúdo da página

Arquivos em lote e scripts de shell frequentemente precisam de uma breve espera para que uma janela ativada com duplo-clique ou um log de instalação permaneça visível. O Windows CMD possui um comando dedicado pause. As shells Unix utilizam read.

O PowerShell fica no meio e precisa de um padrão explícito.

Esta página reúne fragmentos portáveis e as armadilhas habituais (redirecionamentos, SSH sem TTY, CI).

Janelas de terminal — prompts de pausa entre Bash, CMD e PowerShell

Para mais referências sobre shell, consulte a folha de atalhos do Bash e a folha de atalhos do PowerShell.

Para fluxos de trabalho mais amplos de ferramentas, visite Ferramentas de Desenvolvimento: O Guia Completo para Fluxos de Trabalho de Desenvolvimento Moderno.

Quando pausar (e quando não)

Use uma pausa quando um humano estiver observando um terminal interativo e você quiser evitar uma saída instantânea — por exemplo, após um arquivo .bat ser ativado com duplo-clique ou após um script de manutenção local imprimir um resumo.

Evite pausas em cron, serviços systemd, pipelines de CI e na maioria dos one-liners de SSH. Frequentemente não há teclado conectado e o stdin pode não ser um terminal, então esperar por entrada pode travar para sempre. No Bash e no POSIX sh, teste com [ -t 0 ] (ou test -t 0) antes de solicitar.

Windows CMD

O comando pause imprime uma linha localizada, como “Pressione qualquer tecla para continuar . . .” e aguarda uma tecla.

:: salve como pause-demo.bat
@echo off
echo Olá do CMD
pause

Se a saída for redirecionada, o comportamento pode diferir; para scripts que devem ser executados com registro em um arquivo, considere usar timeout /t N para um atraso temporizado em vez de uma pausa interativa.

O choice é útil quando você deseja uma espera temporizada ou teclas específicas (scripts de menu). É um tópico separado do pause, mas frequentemente aparece nos mesmos fluxos de trabalho em lote.

PowerShell

O PowerShell não possui um único alias pause que corresponda ao CMD em todos os hosts. Dois padrões comuns se seguem.

Aguardar apenas Enter

Simples e funciona em muitos hosts, incluindo alguns IDEs.

# pause-demo.ps1
Read-Host 'Pressione Enter para continuar'

Isso não é “qualquer tecla” — apenas Enter conta.

Aguardar qualquer tecla (console Windows)

No PowerShell Windows executado em um host de console normal, ReadKey aguarda uma tecla física:

# pause-any-key.ps1
Write-Host 'Pressione qualquer tecla para continuar...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')

Se $Host.UI ou RawUI não estiverem disponíveis (alguns hosts não interativos, remota ou ambientes restritos), isso pode falhar. Envolva essas chamadas em try / catch ou detecte [Console]::KeyAvailable / capacidades do host quando precisar de robustez.

O PowerShell 7 em plataformas não Windows pode não oferecer a mesma experiência de ReadKey; prefira Read-Host ou o read nativo do shell nesses casos.

Bash (Linux e macOS)

Estilo clássico de “qualquer tecla” com um prompt visível e sem eco da tecla:

#!/usr/bin/env bash
read -r -n 1 -s -p $'Pressione qualquer tecla para continuar...\n'
  • -n 1 — ler um caractere
  • -s — silencioso (sem eco)
  • -r — bruto (barra invertida não é especial)
  • -p — string de prompt

Com uma guarda amigável para automação:

#!/usr/bin/env bash
if [ -t 0 ]; then
  read -r -n 1 -s -p $'Pressione qualquer tecla para continuar...\n'
fi

Notas sobre macOS

O Terminal.app e o iTerm2 se comportam como outros terminais Unix para o Bash. O shell de login padrão da Apple é frequentemente o Zsh; para Zsh interativo, você pode usar read -k 1 em scripts executados explicitamente pelo Zsh. Para máxima portabilidade entre Linux e macOS, permaneça com o Bash ou documente #!/usr/bin/env bash no topo do script.

POSIX sh (portável “pressione Enter”)

O read POSIX não requer read -n, que não é POSIX. O padrão portável é “pressione Enter para continuar”:

#!/bin/sh
printf 'Pressione Enter para continuar... '
read -r _

Isso é amplamente suportado em sistemas baseados em dash, ksh e ash. O “qualquer tecla” de caractere único verdadeiro sem extensões do Bash é mais complicado; se você precisar disso em sh minimalista, documente o Bash ou use abordagens baseadas em stty com cuidado (estado do terminal, portabilidade).

Ramificação multiplataforma

Scripts de instalação às vezes bifurcam o sistema operacional:

  • Windows CMDpause
  • PowerShellReadKey ou Read-Host
  • Unixread com guarda [ -t 0 ]

Em ambientes mistos, mantenha a guarda “apenas interativo” para que servidores e CI nunca fiquem bloqueados.

Leitura relacionada

  • Manual GNU Bash — Bash Builtinsread
  • Microsoft Learn — Read-Host e APIs de console para hosts avançados

Assinar

Receba novos artigos sobre sistemas, infraestrutura e engenharia de IA.