Mettre les scripts en pause avec « Appuyez sur une touche » dans Bash, CMD, PowerShell et macOS.
Pause à n'importe quelle touche pour Bash, CMD, PowerShell et macOS.
Les fichiers par lots et les scripts shell ont souvent besoin d’une courte pause afin qu’une fenêtre lancée par un double-clic ou un journal d’installation reste visible. Windows CMD dispose d’une commande dédiée pause. Les shells Unix utilisent read.
PowerShell se situe entre les deux et nécessite un modèle explicite.
Cette page recense des extraits portables et les pièges habituels (tuyaux, SSH sans TTY, CI).

Pour plus de références sur les shells, consultez la fiche mémo Bash et la fiche mémo PowerShell.
Pour des workflows d’outils plus larges, visitez Outils pour développeurs : Le guide complet des workflows de développement modernes.
Quand faire une pause (et quand ne pas le faire)
Utilisez une pause lorsqu’un humain surveille un terminal interactif et que vous souhaitez éviter une sortie instantanée, par exemple après le double-clic sur un fichier .bat, ou après qu’un script de maintenance local ait affiché un résumé.
Évitez les pauses dans les tâches cron, les services systemd, les pipelines CI et la plupart des commandes SSH en une ligne. Il n’y a souvent pas de clavier connecté et stdin peut ne pas être un terminal, ce qui peut provoquer un blocage indéfini en attendant une entrée. Dans Bash et POSIX sh, testez avec [ -t 0 ] (ou test -t 0) avant de demander une entrée.
Windows CMD
La commande pause affiche une ligne localisée telle que « Appuyez sur une touche pour continuer… » et attend une pression de touche.
:: sauvegarder sous pause-demo.bat
@echo off
echo Bonjour de CMD
pause
Si la sortie est redirigée, le comportement peut varier ; pour les scripts qui doivent s’exécuter avec un journal dans un fichier, envisagez d’utiliser timeout /t N pour un délai chronométré plutôt que pour une pause interactive.
choice est utile si vous souhaitez une attente chronométrée ou des touches spécifiques (scripts de menu). C’est un sujet distinct de pause, mais il apparaît souvent dans les mêmes workflows par lots.
PowerShell
PowerShell n’a pas d’alias pause unique qui correspond à CMD dans chaque hôte. Deux modèles courants suivent.
Attendre uniquement Entrée
Simple et fonctionne dans de nombreux hôtes, y compris certains IDE.
# pause-demo.ps1
Read-Host 'Appuyez sur Entrée pour continuer'
Ce n’est pas « n’importe quelle touche » — seule la touche Entrée compte.
Attendre n’importe quelle touche (console Windows)
Dans PowerShell Windows exécuté dans un hôte de console normal, ReadKey attend une touche physique :
# pause-any-key.ps1
Write-Host 'Appuyez sur n'importe quelle touche pour continuer...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
Si $Host.UI ou RawUI n’est pas disponible (certains hôtes non interactifs, télémaintenance, ou environnements contraints), cela peut échouer. Enveloppez ces appels dans try / catch ou détectez [Console]::KeyAvailable / les capacités de l’hôte lorsque vous avez besoin de robustesse.
PowerShell 7 sur les plateformes non Windows peut ne pas offrir la même expérience ReadKey ; privilégiez Read-Host ou read natif du shell dans ces cas.
Bash (Linux et macOS)
Style classique « n’importe quelle touche » avec une invite visible et sans écho de la touche :
#!/usr/bin/env bash
read -r -n 1 -s -p $'Appuyez sur n'importe quelle touche pour continuer...\n'
-n 1— lire un caractère-s— silencieux (pas d’écho)-r— brut (le backslash n’est pas spécial)-p— chaîne d’invite
Avec une protection amicale pour l’automatisation :
#!/usr/bin/env bash
if [ -t 0 ]; then
read -r -n 1 -s -p $'Appuyez sur n'importe quelle touche pour continuer...\n'
fi
Notes pour macOS
Terminal.app et iTerm2 se comportent comme les autres terminaux Unix pour Bash. Le shell de connexion par défaut d’Apple est souvent Zsh ; pour Zsh interactif, vous pouvez utiliser read -k 1 dans les scripts exécutés explicitement par Zsh. Pour une portabilité maximale entre Linux et macOS, restez avec Bash ou documentez #!/usr/bin/env bash en haut du script.
POSIX sh (portable « appuyer sur Entrée »)
POSIX read ne nécessite pas read -n, qui n’est pas POSIX. Le modèle portable est « appuyer sur Entrée pour continuer » :
#!/bin/sh
printf 'Appuyez sur Entrée pour continuer... '
read -r _
Cela est largement supporté sur les systèmes basés sur dash, ksh et ash. Une vraie touche unique « n’importe quelle touche » sans les extensions de Bash est plus complexe ; si vous en avez besoin sur un sh minimal, documentez Bash ou utilisez des approches basées sur stty avec précaution (état du terminal, portabilité).
Branchement multiplateforme
Les scripts d’installation branchent parfois selon le système d’exploitation :
- Windows CMD —
pause - PowerShell —
ReadKeyouRead-Host - Unix —
readavec la garde[ -t 0 ]
Dans les environnements mixtes, conservez la garde « interactif uniquement » afin que les serveurs et la CI ne se bloquent jamais.
Lectures connexes
- Fiche mémo Bash — référence de commande générale
- Fiche mémo PowerShell — cmdlets et usage quotidien
Liens utiles
- Manuel GNU Bash — Bash Builtins —
read - Microsoft Learn — Read-Host et API console pour les hôtes avancés