728x90
반응형
Bash 스크립트를 작성하다 보면 예상치 못한 오류가 발생하거나, 코드의 흐름을 추적해야 할 때가 있습니다. 이럴 때 유용하게 사용할 수 있는 두 가지 디버깅 옵션이 있습니다: set -x
와 set -e
. 이번 글에서는 이 두 옵션의 기능과 사용법을 상세히 설명하고, 예제 코드를 통해 실전 활용법을 알아보겠습니다.
1. set
명령어란?
set
명령어는 Bash에서 셸 옵션을 설정하거나 해제할 때 사용하는 명령어입니다. 다양한 옵션 중 디버깅에 유용한 옵션은 -x
와 -e
입니다.
주요 옵션
-x
: 실행되는 명령어를 터미널에 출력합니다. 스크립트의 실행 흐름을 파악할 때 유용합니다.-e
: 명령어가 실패하면 즉시 스크립트를 종료합니다. 오류를 사전에 감지하고 처리할 때 유용합니다.
2. set -x
: 실행 흐름 추적하기
set -x
옵션은 스크립트에서 실행되는 명령어를 출력합니다. 이를 통해 스크립트가 어떤 순서로 실행되고 있는지 쉽게 추적할 수 있습니다.
사용법
#!/bin/bash
set -x
echo "Hello, World!"
ls non_existent_file # 존재하지 않는 파일
echo "This line will still execute."
출력 예시
+ echo Hello, World!
Hello, World!
+ ls non_existent_file
ls: cannot access 'non_existent_file': No such file or directory
+ echo This line will still execute.
This line will still execute.
+
기호 뒤에 실행된 명령어가 표시됩니다.- 에러가 발생했더라도 스크립트는 계속 실행됩니다.
3. set -e
: 오류 발생 시 스크립트 종료하기
set -e
옵션은 명령어 실행 중 오류가 발생하면 스크립트를 즉시 종료합니다. 이는 예기치 않은 오류로 인한 추가 실행을 방지합니다.
사용법
#!/bin/bash
set -e
echo "Starting script."
ls non_existent_file # 존재하지 않는 파일
echo "This line will not execute."
출력 예시
Starting script.
ls: cannot access 'non_existent_file': No such file or directory
- 오류가 발생한 후 스크립트가 즉시 종료되므로 마지막
echo
명령어는 실행되지 않습니다.
4. set -x
와 set -e
함께 사용하기
두 옵션을 조합하여 디버깅과 오류 방지를 동시에 수행할 수 있습니다.
예제
#!/bin/bash
set -x
set -e
echo "Starting script."
mkdir test_directory
cd test_directory
ls non_existent_file # 존재하지 않는 파일
echo "This line will not execute."
출력 예시
+ echo Starting script.
Starting script.
+ mkdir test_directory
+ cd test_directory
+ ls non_existent_file
ls: cannot access 'non_existent_file': No such file or directory
set -x
로 실행 흐름을 확인하면서,set -e
로 오류 발생 시 즉시 종료합니다.- 오류 발생 시 그 시점까지의 실행 흐름을 확인할 수 있습니다.
5. 스크립트 내에서 옵션 제어하기
특정 부분에서만 옵션을 활성화하거나 비활성화하고 싶을 때는 set
명령어를 스크립트 내부에서 사용하면 됩니다.
예제
#!/bin/bash
set -e
echo "Starting script."
# 디버깅 활성화
set -x
mkdir test_directory
cd test_directory
set +x # 디버깅 비활성화
ls non_existent_file # 이 줄에서 오류 발생 시 스크립트 종료
echo "This line will not execute."
출력 예시
Starting script.
+ mkdir test_directory
+ cd test_directory
ls: cannot access 'non_existent_file': No such file or directory
set -x
와set +x
를 사용해 디버깅을 특정 범위에서만 활성화할 수 있습니다.
6. 실전에서의 활용 사례
예제 1: 배포 스크립트
배포 과정에서 오류가 발생하면 즉시 중단하고 디버깅 정보를 출력하도록 설정합니다.
#!/bin/bash
set -ex
echo "Starting deployment."
scp app.tar.gz user@server:/path/to/deploy
ssh user@server "cd /path/to/deploy && tar -xzf app.tar.gz"
echo "Deployment completed."
예제 2: 테스트 자동화 스크립트
테스트 중 오류가 발생하면 즉시 중단하고, 실행된 명령어를 기록합니다.
#!/bin/bash
set -ex
echo "Running tests."
pytest tests/
echo "All tests passed."
7. 주의사항
set -e
는 모든 오류를 감지하지는 않습니다. 예를 들어, 파이프라인에서 발생한 오류는 무시될 수 있습니다. 이를 방지하려면set -o pipefail
옵션을 추가로 사용해야 합니다.
예제
#!/bin/bash
set -e
set -o pipefail
echo "Starting script."
cat non_existent_file | grep "text"
echo "This line will not execute."
8. 결론
Bash 스크립트 디버깅은 간단한 설정으로 시작할 수 있습니다. set -x
를 사용해 실행 흐름을 추적하고, set -e
를 통해 오류를 방지하세요. 두 옵션을 적절히 조합하면 더욱 안정적이고 디버깅이 용이한 스크립트를 작성할 수 있습니다.
반응형
'Linux Bash shell script' 카테고리의 다른 글
Bash Shell Script - 정규표현식과 grep (0) | 2025.02.05 |
---|---|
Bash Shell Script 로그 파일 작성 및 분석 (0) | 2025.02.04 |
Bash Shell Script 파이프라인(Pipeline)을 활용한 명령어 조합 (0) | 2025.02.02 |
Bash Shell Script 파일 입출력 (cat, tee, >) (0) | 2025.02.01 |
Bash Shell Script 프로세스 종료 및 제어 (kill, ps, top) (0) | 2025.01.31 |