0Pricing
DevOps Bootcamp · 강의

Bash 스크립트 디버깅(set -x, trap)

실행 추적과 오류 처리를 위한 'trap' 사용을 비롯해 Bash 스크립트를 디버깅하는 방법을 알아봅니다.

Bash 스크립트 디버깅(set -x, trap)은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.

스크립트를 디버깅해야 하는 이유

아무리 훌륭한 스크립트에도 버그가 있을 수 있습니다! 디버깅은 이러한 오류를 찾아 수정하는 과정입니다.

디버깅은 모든 개발자에게 중요한 기술입니다. 스크립트가 단계별로 무엇을 수행하는지, 또 어디에서 문제가 발생할 수 있는지 이해하는 데 도움이 됩니다.

이 레슨에서는 실행을 추적하고 예상치 못한 이벤트를 처리하는 강력한 Bash 도구를 배웁니다.

`set -x`로 스크립트 추적하기

Bash에서 가장 간단하면서도 효과적인 디버깅 도구 중 하나는 set -x입니다. 이 명령은 명령 추적을 활성화합니다.

  • 활성화하면 Bash는 각 명령과 인수를 실행하기 직전에 표준 오류(대개 터미널을 의미함)로 출력합니다.
  • 이 출력에는 확장된 후 변수의 상태가 포함되므로 Bash가 곧 수행할 작업을 명확하게 확인할 수 있습니다.
  • 스크립트가 느린 동작으로 실행되는 모습을 지켜보는 것과 같습니다!

`set -x` 동작 확인하기

set -x가 실제로 어떻게 동작하는지 살펴보겠습니다. 셸이 변수 확장 후 각 명령을 + 기호를 앞에 붙여 출력하는 방식에 주목하십시오.

다음 예제를 실행해 보십시오.

#!/bin/bash

# Enable command tracing
set -x

NAME="Coddy"
MESSAGE="Hello, $NAME!"

echo $MESSAGE

# This command will intentionally fail
ls -l /nonexistent_directory

# Disable command tracing
set +x

echo "Tracing is now off."

추적 출력 이해하기

set -x가 활성화되면 + 기호로 시작하는 줄이 표시됩니다. 이는 추적 출력임을 나타냅니다.

  • + 뒤에는 Bash가 실행하려는 명령과 인수가 표시되며, 변수 또는 명령 치환이 적용된 후의 값이 사용됩니다.
  • 이를 통해 변수의 정확한 값과 실행되는 명령을 정확하게 확인할 수 있어 매우 유용합니다.
  • 잘못된 경로, 빈 변수 또는 의도하지 않은 명령 구조와 같은 문제의 원인을 파악하는 데 도움이 됩니다.

`set -x` 범위 제어하기

스크립트 전체를 항상 추적할 필요는 없습니다. 특정 부분에서만 set -x를 활성화할 수 있습니다.

  • set -x를 사용하여 추적을 켜십시오.
  • set +x를 사용하여 추적을 끄십시오.

이렇게 하면 안정적인 부분의 출력에 압도되지 않고 문제가 있는 스크립트 부분에 디버깅 작업을 집중할 수 있습니다.

`trap`으로 이벤트 처리하기

trap 명령을 사용하면 신호와 기타 이벤트를 감지한 다음 해당 이벤트가 발생할 때 명령을 실행할 수 있습니다. 다음과 같은 경우에 유용합니다.

  • 정리: 임시 파일이 삭제되도록 합니다.
  • 오류 처리: 실패한 명령에 대응합니다.
  • 정상적인 종료: Ctrl+C와 같은 사용자의 중단을 처리합니다.

기본 문법은 trap 'command_to_execute' SIGNAL_OR_EVENT입니다.

`trap EXIT`로 정리하기

EXIT 의사 신호는 특별합니다. EXIT으로 가로챈 명령은 스크립트가 성공, 실패 또는 중단 중 어떤 방식으로 종료되든 종료되기 직전에 실행됩니다.

따라서 임시 파일 삭제와 같은 정리 작업에 적합합니다. 다음 스크립트를 실행해 보십시오.

#!/bin/bash

TEMP_FILE="/tmp/coddy_temp_$(date +%s).txt"

# Trap the EXIT signal to remove the temp file
trap 'echo "Cleaning up: Removing $TEMP_FILE"; rm -f "$TEMP_FILE"' EXIT

echo "Script started. Creating temporary file..."
touch "$TEMP_FILE"
echo "Temporary file created: $TEMP_FILE"

# Simulate some work
sleep 2

echo "Script logic completed. Exiting..."

`trap ERR`로 오류 감지하기

ERR 의사 신호는 명령이 0이 아닌 상태로 종료될 때(즉, 실패할 때) 발생합니다. 이를 통해 오류가 발생한 경우에만 특정 작업을 수행할 수 있습니다.

참고: trap ERR은 명령이 if, while 또는 until 조건의 일부가 아니거나 반환 값이 명시적으로 확인되지 않는 경우에만 작동합니다(예: command || true).

#!/bin/bash

# Trap ERR to report the error line number
trap 'echo "Error detected on line $LINENO! Exiting."' ERR

echo "Starting script with an intentional error..."

# This command will fail and trigger the ERR trap
ls /this/path/does/not/exist

echo "This line will NOT be reached if an error occurs."

신호에 대응하기 (INT, TERM)

trap은 표준 Linux 신호도 감지할 수 있습니다. 일반적인 신호는 다음과 같습니다.

  • INT(중단): Ctrl+C를 누를 때 전송됩니다.
  • TERM(종료): 프로세스를 정상적으로 종료해 달라는 요청입니다.

이러한 신호를 가로채면 스크립트가 갑자기 종료되는 대신 종료하기 전에 정리 작업을 수행하거나 상태를 저장할 수 있습니다.

#!/bin/bash

# Trap INT (Ctrl+C) to exit gracefully
trap 'echo "\nCaught Ctrl+C! Exiting gracefully..."; exit 1' INT

echo "Running a continuous task. Press Ctrl+C to stop."

while true; do
  echo "Working... $(date)"
  sleep 3
done

디버깅 확인

Bash 디버깅 기법을 얼마나 이해했는지 확인해 보겠습니다.

복습: 스크립트 디버깅하기

잘하셨습니다! Bash 스크립트를 디버깅하는 데 필요한 다음 도구를 배웠습니다.

  • set -x: 명령 추적을 활성화하여 Bash가 정확히 무엇을 실행하는지 보여 줍니다. 추적을 끄려면 set +x를 사용하십시오.
  • trap: 특정 이벤트나 신호에 대응하여 명령을 실행할 수 있습니다.
  • `trap EXIT`: 스크립트가 끝나기 전에 정리 작업이 실행되도록 합니다.
  • `trap ERR`: 0이 아닌 상태로 종료되는 명령을 감지합니다.
  • `trap INT`/`TERM`: 사용자의 중단이나 종료 요청을 정상적으로 처리합니다.

이러한 기법을 익히면 Bash 스크립트의 문제를 해결하고 견고한 스크립트를 작성하는 능력이 크게 향상됩니다!

자주 묻는 질문

“Bash 스크립트 디버깅(set -x, trap)” 강의는 무료인가요?

네 — “Bash 스크립트 디버깅(set -x, trap)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.

“Bash 스크립트 디버깅(set -x, trap)”에서 뭘 배우나요?

실행 추적과 오류 처리를 위한 'trap' 사용을 비롯해 Bash 스크립트를 디버깅하는 방법을 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Bash 스크립트 디버깅(set -x, trap)” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Bash 스크립트 디버깅(set -x, trap)
  2. 오류 처리와 종료 상태
  3. 스크립트 작성 모범 사례와 린팅
  4. Bats로 Bash 스크립트 테스트하기
← DevOps Bootcamp(으)로 돌아가기