Bash, CMD, PowerShell 및 macOS에서 “Press Any Key”로 스크립트 일시 정지

발행: (2026년 4월 25일 PM 05:09 GMT+9)
10 분 소요
원문: Dev.to

Source: Dev.to

스크립트 일시 정지: Bash, CMD, PowerShell, macOS에서 “아무 키나 누르세요” 구현하기

스크립트를 실행한 뒤 사용자가 결과를 확인할 수 있도록 잠시 멈추고 싶을 때가 있습니다.
다양한 셸과 운영체제마다 “아무 키나 누르면 계속” 기능을 구현하는 방법이 조금씩 다릅니다.
아래에서는 Bash (Linux), Windows CMD, PowerShell, 그리고 macOS 터미널에서 사용할 수 있는 간단한 방법들을 정리했습니다.


1️⃣ Bash (Linux)

read -n 1 -s -r -p "Press any key to continue..."
echo   # 줄바꿈을 위해 추가
  • -n 1 : 한 글자만 읽음
  • -s : 입력을 화면에 표시하지 않음 (silent)
  • -r : 백슬래시를 이스케이프 문자로 처리하지 않음
  • -p : 프롬프트 메시지를 지정

echo는 프롬프트 뒤에 남아 있는 커서를 다음 줄로 이동시키기 위해 넣었습니다.


2️⃣ CMD (Windows)

pause

pause 명령은 기본적으로 “Press any key to continue …” 라는 메시지를 표시하고 키 입력을 기다립니다.
특정 메시지를 지정하고 싶다면:

echo Press any key to continue...
pause >nul

>nulpause 가 출력하는 기본 메시지를 숨깁니다.


3️⃣ PowerShell (Windows)

Read-Host -Prompt "Press any key to continue..."

Read-Host 는 입력을 받아 반환하지만, 여기서는 반환값을 사용하지 않으므로 단순히 대기용으로 활용합니다.


4️⃣ macOS (Terminal)

macOS에서도 기본 쉘이 Bash 혹은 Zsh이므로 Bash와 동일한 방법을 사용할 수 있습니다.

read -n 1 -s -r -p "Press any key to continue..."
echo

Zsh 를 사용한다면 read -k 1 "?Press any key to continue..." 와 같은 형태도 가능합니다.


📌 팁 & 주의사항

  • 스크립트 호환성: 위 예제들은 각각의 셸에 특화되어 있습니다. 하나의 스크립트가 여러 환경에서 동작하도록 하려면 OS와 셸을 감지한 뒤 적절한 코드를 실행하도록 조건문을 넣어야 합니다.
  • 출력 포맷: readRead-Host 로 입력을 받는 경우, 사용자가 입력한 문자가 화면에 표시되지 않게(-s 옵션) 하는 것이 일반적입니다. 이는 깔끔한 UI를 유지하는 데 도움이 됩니다.
  • 대체 방법: stty 를 이용해 터미널 모드를 직접 조작하는 방법도 있지만, 위에 소개한 read 가 가장 간단하고 이식성이 좋습니다.

🎉 마무리

다양한 플랫폼에서 “아무 키나 누르면 계속” 기능을 구현하는 방법을 살펴보았습니다.
필요에 따라 위 코드를 복사해 스크립트에 삽입하면, 사용자가 결과를 확인하고 다음 단계로 진행하도록 자연스럽게 흐름을 제어할 수 있습니다.

Happy scripting! 🚀

Overview

스크립트를 대화식으로 실행할 때(예: .bat 파일을 더블 클릭하거나 요약을 출력하는 유지보수 스크립트) 짧은 일시 정지가 종종 유용합니다. 이는 사람이 출력을 읽을 수 있을 만큼 창을 충분히 열어 둡니다.

비대화식 환경(예: cron, systemd 서비스, CI 파이프라인, 대부분의 SSH 원‑라인)에서는 일시 정지를 사용하지 마세요—stdin이 터미널이 아닐 수 있어 스크립트가 멈출 수 있습니다. Bash와 POSIX sh에서는 프롬프트를 표시하기 전에 [ -t 0 ](또는 test -t 0) 로 테스트하세요.

Windows CMD

내장 pause 명령은 “Press any key to continue …”와 같은 현지화된 메시지를 출력하고 키 입력을 기다립니다.

:: save as pause-demo.bat
@echo off
echo Hello from CMD
pause
  • 출력이 리다이렉트된 경우 pause가 다르게 동작할 수 있습니다.
  • 로그가 남는 실행에서는 인터랙티브한 일시 정지 대신 timeout /t N을 사용해 지정된 시간 지연을 고려하십시오.

choice는 타이머 대기나 특정 키 입력에 사용할 수 있지만, pause와는 별개의 주제입니다.

PowerShell

PowerShell에는 CMD의 pause와 일치하는 단일 별칭이 없습니다. 일반적인 두 가지 패턴은 다음과 같습니다:

Enter 키 입력 요청 (많은 호스트에서 작동)

# pause-demo.ps1
Read-Host 'Press Enter to continue'

오직 Enter 키만 허용됩니다.

any key 입력 요청 (콘솔 호스트 필요)

# pause-any-key.ps1
Write-Host 'Press any key to continue...'
$null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown')
  • $Host.UI 또는 RawUI를 사용할 수 없는 경우(예: 비대화형 호스트, 원격 실행, 제한된 환경) 호출이 실패할 수 있습니다. try / catch로 감싸거나 [Console]::KeyAvailable / 호스트 기능을 감지하여 견고하게 처리하세요.
  • PowerShell 7+을 비 Windows 플랫폼에서 실행할 경우 ReadKey가 동일하게 동작하지 않을 수 있습니다; 이 경우 Read-Host 또는 해당 플랫폼의 기본 read 명령을 사용하는 것이 좋습니다.

Bash (Linux/macOS)

시각적인 프롬프트와 에코 없이 동작하는 전통적인 “any key” 일시정지:

#!/usr/bin/env bash
read -r -n 1 -s -p $'Press any key to continue...\n'
  • -n 1 한 문자 읽기
  • -s  무음(에코 없음)
  • -r  원시 모드(백슬래시를 특수 문자로 처리하지 않음)
  • -p  프롬프트 문자열

비대화형 환경을 위한 보호

#!/usr/bin/env bash
if [ -t 0 ]; then
  read -r -n 1 -s -p $'Press any key to continue...\n'
fi

macOS 터미널

Terminal.app와 iTerm2는 다른 Unix 터미널과 동일하게 동작합니다. macOS의 기본 로그인 쉘은 종종 zsh이며, zsh에서 명시적으로 실행되는 스크립트의 경우 read -k 1을 사용할 수 있습니다. Linux와 macOS 모두에서 최대한 이식성을 확보하려면 Bash를 사용하거나 스크립트 상단에 #!/usr/bin/env bash를 명시하십시오.

POSIX sh (휴대용 “Enter 키 누르기”)

POSIX read 내장 명령은 비표준인 -n 옵션을 필요로 하지 않습니다. 휴대용 “Enter 키 누르기” 패턴은 어디서든 동작합니다:

#!/bin/sh
printf 'Press Enter to continue... '
read -r _

이 코드는 dash, ksh, ash 및 기타 POSIX‑호환 쉘에서 작동합니다. Bash 확장 없이 진정한 단일 문자 “any key” 일시 정지를 구현하려면 (예: stty 사용) 더 복잡하며, 최소한의 sh 스크립트에서는 일반적으로 권장되지 않습니다.

크로스‑플랫폼 권장 사항

환경권장 일시정지
Windows CMDpause (또는 시간 지연을 위한 timeout /t N)
PowerShellRead-Host (Enter용); $Host.UI.RawUI.ReadKey() (아무 키용, 대체 옵션 포함)
Bash (Linux/macOS)read -r -n 1 -s -p ...[ -t 0 ] 가드 사용
POSIX shprintf …; read -r _ (Enter 키 누르기)

항상 “인터랙티브 전용” 가드 ([ -t 0 ] 또는 동등한) 를 유지하여 자동화된 환경에서 스크립트가 차단되는 것을 방지하십시오.

유용한 링크

0 조회
Back to Blog

관련 글

더 보기 »