Pausar scripts con "Presiona cualquier tecla" en Bash, CMD, PowerShell y macOS

Pausa con cualquier tecla para Bash, CMD, PowerShell y macOS.

Índice

Los archivos por lotes y los scripts de shell a menudo necesitan una breve espera para que una ventana con doble clic o un registro de instalación permanezca visible. Windows CMD tiene un comando dedicado pause. Las shells de Unix utilizan read.

PowerShell se encuentra en un punto intermedio y requiere un patrón explícito.

Esta página recopila fragmentos portátiles y las trampas habituales (tuberías, SSH sin TTY, CI).

Ventanas de terminal — prompts de pausa en Bash, CMD y PowerShell

Para más referencias de shell, consulte la hoja de referencia de Bash y la hoja de trucos de PowerShell.

Para flujos de trabajo de herramientas más amplios, visite Herramientas para desarrolladores: La guía completa para flujos de trabajo de desarrollo modernos.

Cuándo pausar (y cuándo no)

Utilice una pausa cuando un humano esté observando una terminal interactiva y quiera evitar una salida instantánea; por ejemplo, después de un archivo .bat con doble clic, o después de que un script de mantenimiento local imprima un resumen.

Omita las pausas en cron, servicios systemd, pipelines de CI y la mayoría de las órdenes únicas de SSH. A menudo no hay un teclado conectado y stdin puede no ser una terminal, por lo que esperar una entrada puede quedarse colgado para siempre. En Bash y POSIX sh, pruebe con [ -t 0 ] (o test -t 0) antes de solicitar la entrada.

Windows CMD

El comando pause imprime una línea localizada como “Presione cualquier tecla para continuar . . .” y espera una pulsación de tecla.

:: guardar como pause-demo.bat
@echo off
echo Hola desde CMD
pause

Si la salida se redirige, el comportamiento puede diferir; para scripts que deben ejecutarse registrándose en un archivo, considere timeout /t N para un retraso temporizado en lugar de una pausa interactiva.

choice es útil cuando desea una espera temporizada o teclas específicas (scripts de menú). Es un tema separado de pause, pero a menudo aparece en los mismos flujos de trabajo por lotes.

PowerShell

PowerShell no tiene un solo alias pause que coincida con CMD en cada host. Siguen dos patrones comunes.

Esperar solo Enter

Sencillo y funciona en muchos hosts, incluidos algunos IDE.

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

Esto no es “cualquier tecla”; solo cuenta Enter.

Esperar cualquier tecla (consola de Windows)

En PowerShell de Windows ejecutándose en un host de consola normal, ReadKey espera una tecla física:

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

Si $Host.UI o RawUI no están disponibles (algunos hosts no interactivos, acceso remoto o entornos restringidos), esto puede fallar. Envuelva estas llamadas en try / catch o detecte [Console]::KeyAvailable / capacidades del host cuando necesite robustez.

PowerShell 7 en plataformas no Windows puede no ofrecer la misma experiencia de ReadKey; prefiera Read-Host o read nativo de la shell en esos casos.

Bash (Linux y macOS)

Estilo clásico de “cualquier tecla” con un prompt visible y sin eco de la tecla:

#!/usr/bin/env bash
read -r -n 1 -s -p $'Presione cualquier tecla para continuar...\n'
  • -n 1 — leer un carácter
  • -s — silencioso (sin eco)
  • -r — sin procesar (la barra invertida no es especial)
  • -p — cadena de prompt

Con una protección amigable para la automatización:

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

Notas de macOS

Terminal.app y iTerm2 se comportan como otras terminales Unix para Bash. La shell de inicio predeterminada de Apple a menudo es Zsh; para Zsh interactivo, puede utilizar read -k 1 en scripts ejecutados explícitamente por Zsh. Para máxima portabilidad entre Linux y macOS, utilice Bash o documente #!/usr/bin/env bash al principio del script.

POSIX sh (portable “presione Enter”)

POSIX read no requiere read -n, lo cual no es POSIX. El patrón portable es “presione Enter para continuar”:

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

Esto está ampliamente soportado en sistemas basados en dash, ksh y ash. El “cualquier tecla” de un solo carácter verdadero sin extensiones de Bash es más complicado; si lo necesita en un sh minimalista, documente Bash o utilice enfoques basados en stty con cuidado (estado de terminal, portabilidad).

Ramificación multiplataforma

Los scripts de instalación a veces ramifican según el sistema operativo:

  • Windows CMDpause
  • PowerShellReadKey o Read-Host
  • Unixread con protección [ -t 0 ]

En entornos mixtos, mantenga la protección de “solo interactivo” para que los servidores y CI nunca se bloqueen.

Lectura relacionada

Enlaces útiles

  • Manual de GNU Bash — Bash Builtinsread
  • Microsoft Learn — Read-Host y APIs de consola para hosts avanzados

Suscribirse

Recibe nuevas publicaciones sobre sistemas, infraestructura e ingeniería de IA.