Linux 스크립트 실행

ShellBeginner
지금 연습하기

소개

이 실습에서는 현재 셸에서 스크립트를 실행하는 강력한 도구인 Linux의 source 명령어를 이해하고 사용하는 데 중점을 둡니다. 별도의 하위 프로세스에서 실행되는 일반적인 스크립트 실행 방식과 달리, source 명령어는 현재 셸 환경에서 파일의 명령어를 직접 실행합니다. 이를 통해 스크립트 내에서 정의된 변수와 함수가 현재 세션에서 유지될 수 있습니다.

이번 실습을 통해 다음 내용을 학습합니다:

  • source 명령어를 사용하여 스크립트를 생성하고 실행하는 방법
  • source 사용 시 스크립트에 매개변수를 전달하는 방법
  • source 명령어와 일반적인 스크립트 실행 방식의 차이점
  • source 명령어를 사용하여 환경 변수를 설정하는 방법

실습을 마칠 때쯤이면 효율적인 Linux 셸 스크립팅과 환경 관리를 위해 source 명령어를 능숙하게 사용할 수 있게 될 것입니다.

기본 스크립트 생성 및 source 실행

이 단계에서는 간단한 스크립트 파일을 만들고 source 명령어를 사용하여 현재 셸 환경에서 실행해 봅니다. 이를 통해 source가 일반적인 스크립트 실행과 어떻게 다른지 이해할 수 있습니다.

스크립트를 일반적인 방식(예: ./script.sh)으로 실행하면, 셸은 스크립트를 실행하기 위해 새로운 하위 프로세스를 생성합니다. 해당 스크립트 내에서 정의된 변수나 함수는 그 하위 프로세스 내에서만 존재하며 스크립트가 종료되면 사라집니다. 하지만 source 명령어(또는 단축 표기인 .)를 사용하면 스크립트의 명령어가 현재 셸 환경에서 실행되므로, 스크립트가 완료된 후에도 변수와 함수가 유지됩니다.

이 개념을 확인하기 위해 간단한 스크립트를 만들어 보겠습니다.

1. 프로젝트 디렉토리로 이동

먼저 올바른 디렉토리에 있는지 확인합니다:

cd ~/project

2. 간단한 스크립트 파일 생성

nano 편집기를 사용하여 variables.sh라는 새 파일을 만듭니다:

nano variables.sh

파일에 다음 내용을 추가합니다:

#!/bin/bash
## 이 스크립트는 환경 변수를 설정합니다
export WEATHER="Sunny"
echo "The weather is now set to: $WEATHER"

Ctrl+O를 눌러 파일을 저장하고, Enter를 눌러 파일 이름을 확인한 다음, Ctrl+X를 눌러 nano를 종료합니다.

3. 스크립트에 실행 권한 부여

스크립트를 실행하기 전에 실행 가능하도록 권한을 변경해야 합니다:

chmod +x variables.sh

4. 일반적인 방식으로 스크립트 실행

먼저 전통적인 방식으로 스크립트를 실행해 보겠습니다:

./variables.sh

다음과 유사한 출력이 나타납니다:

The weather is now set to: Sunny

이제 현재 셸에 WEATHER 변수가 존재하는지 확인합니다:

echo $WEATHER

아무것도 출력되지 않거나 빈 줄이 나타날 것입니다. 이는 변수가 스크립트를 실행한 하위 프로세스에서만 설정되었고, 현재 셸에는 설정되지 않았기 때문입니다.

5. source로 스크립트 실행

이제 source 명령어를 사용하여 스크립트를 실행해 보겠습니다:

source variables.sh

동일한 출력이 나타납니다:

The weather is now set to: Sunny

WEATHER 변수를 다시 확인합니다:

echo $WEATHER

이번에는 다음과 같이 출력되어야 합니다:

Sunny

source 명령어를 사용하여 스크립트를 실행했기 때문에 WEATHER 변수가 현재 셸에 존재하게 된 것입니다.

6. 단축 표기법 사용

source 명령어 대신 점(.) 단축 표기법을 사용할 수도 있습니다:

. ./variables.sh

이는 source variables.sh를 사용하는 것과 동일한 결과를 냅니다. ./ 접두사는 셸에게 현재 디렉토리에서 스크립트를 가져오도록 지시합니다.

매개변수와 함께 source 사용하기

이 단계에서는 source 명령어를 사용할 때 스크립트에 매개변수를 전달하는 방법을 배웁니다. 이는 스크립트를 더 유연하고 재사용 가능하게 만들 때 유용합니다.

일반적인 스크립트 실행과 마찬가지로 source 명령어를 사용할 때도 스크립트에 인수를 전달할 수 있습니다. 스크립트 내부에서는 이러한 인수를 표준 위치 매개변수($1, $2 등)를 통해 직접 실행할 때와 동일하게 접근할 수 있습니다.

1. 매개변수를 받는 스크립트 생성

~/project 디렉토리에 greeting.sh라는 새 파일을 만듭니다:

cd ~/project
nano greeting.sh

파일에 다음 내용을 추가합니다:

#!/bin/bash
## 이 스크립트는 이름 매개변수를 받아 인사말 변수를 설정합니다

## 매개변수가 제공되었는지 확인
if [ -z "$1" ]; then
  NAME="Guest"
else
  NAME="$1"
fi

## 인사말 환경 변수 설정
export GREETING="Hello, $NAME!"
echo "$GREETING"

Ctrl+O, Enter, Ctrl+X를 눌러 nano를 저장하고 종료합니다.

2. 스크립트에 실행 권한 부여

chmod +x greeting.sh

3. 매개변수와 함께 source 실행

스크립트를 source하고 이름 매개변수를 전달해 보겠습니다:

source greeting.sh "Alice"

다음과 같은 출력이 나타납니다:

Hello, Alice!

이제 현재 셸에 GREETING 변수가 설정되었는지 확인합니다:

echo $GREETING

다음과 같이 출력되어야 합니다:

Hello, Alice!

4. 다른 매개변수로 source 실행

다른 이름을 사용하여 스크립트를 다시 source해 봅니다:

source greeting.sh "Bob"

출력:

Hello, Bob!

GREETING 변수를 다시 확인합니다:

echo $GREETING

출력:

Hello, Bob!

GREETING 변수가 새로운 값으로 업데이트된 것을 확인할 수 있습니다.

5. 매개변수 없이 source 실행

매개변수 없이 스크립트를 source할 수도 있습니다:

source greeting.sh

출력:

Hello, Guest!

매개변수가 제공되지 않으면 스크립트는 기본값("Guest")을 사용합니다.

GREETING 변수를 마지막으로 한 번 더 확인합니다:

echo $GREETING

출력:

Hello, Guest!

이는 서로 다른 입력 매개변수를 처리하여 스크립트를 어떻게 적응성 있게 만들 수 있는지 보여줍니다.

개발 환경 스크립트 생성

이 단계에서는 더 실용적인 예제를 만들어 봅니다. 여러 변수를 사용하여 개발 환경을 설정하는 스크립트입니다. 이는 실제 환경에서 source 명령어를 사용하는 일반적인 사례입니다.

1. 개발 환경 스크립트 생성

~/project 디렉토리에 dev_env.sh라는 새 파일을 만듭니다:

cd ~/project
nano dev_env.sh

파일에 다음 내용을 추가합니다:

#!/bin/bash
## 개발 환경 설정 스크립트

## 데이터베이스 연결 설정
export DB_HOST="localhost"
export DB_PORT="5432"
export DB_USER="dev_user"
export DB_PASSWORD="dev_password"
export DB_NAME="dev_database"

## API 설정
export API_URL="http://localhost:3000/api"
export API_KEY="dev_api_key_123"

## 애플리케이션 경로
export APP_ROOT="/home/labex/project/app"
export LOG_DIR="/home/labex/project/logs"

## 디렉토리가 없으면 생성
mkdir -p $APP_ROOT
mkdir -p $LOG_DIR

## 확인 메시지 표시
echo "Development environment configured with the following settings:"
echo "-----------------------------------------------------------"
echo "Database: $DB_USER@$DB_HOST:$DB_PORT/$DB_NAME"
echo "API URL: $API_URL"
echo "App Root: $APP_ROOT"
echo "Log Directory: $LOG_DIR"
echo "-----------------------------------------------------------"
echo "Environment is ready for development!"

Ctrl+O, Enter, Ctrl+X를 눌러 nano를 저장하고 종료합니다.

2. 스크립트에 실행 권한 부여

chmod +x dev_env.sh

3. 개발 환경 스크립트 source 실행

이제 스크립트를 source하여 개발 환경을 설정합니다:

source dev_env.sh

다음과 유사한 출력이 나타납니다:

Development environment configured with the following settings:
-----------------------------------------------------------
Database: dev_user@localhost:5432/dev_database
API URL: http://localhost:3000/api
App Root: /home/labex/project/app
Log Directory: /home/labex/project/logs
-----------------------------------------------------------
Environment is ready for development!

4. 환경 변수 설정 확인

스크립트에 의해 설정된 환경 변수 중 일부를 확인해 봅니다:

echo "Database connection string: $DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME"

출력:

Database connection string: dev_user:dev_password@localhost:5432/dev_database

API 설정을 확인합니다:

echo "API settings: $API_URL with key $API_KEY"

출력:

API settings: http://localhost:3000/api with key dev_api_key_123

5. 디렉토리 생성 확인

스크립트에 지정된 디렉토리가 생성되었는지 확인합니다:

ls -la ~/project/app ~/project/logs

두 디렉토리가 모두 존재함을 보여주는 출력이 나타나야 합니다.

이 예제는 source 명령어를 사용하여 여러 환경 변수와 설정이 포함된 완전한 개발 환경을 구축하는 방법을 보여줍니다. 이러한 방식은 개발 워크플로우에서 서로 다른 환경(개발, 테스트, 운영 등) 간에 전환할 때 흔히 사용됩니다.

요약

이번 실습에서는 Linux에서 source 명령어를 사용하여 현재 셸 환경에서 스크립트를 실행하는 방법을 배웠습니다. 실습 내용을 요약하면 다음과 같습니다:

  1. 기본 스크립트 생성 및 source 실행: source를 사용하는 것이 일반적인 스크립트 실행과 어떻게 다른지 배웠습니다. source를 사용하면 스크립트 내에서 정의된 변수와 함수가 현재 셸 세션에서 유지됩니다.

  2. source 스크립트에 매개변수 전달: source 명령어 사용 시 매개변수를 전달하여 스크립트를 더 유연하게 만드는 방법과 스크립트 내부에서 해당 매개변수를 처리하는 방법을 살펴보았습니다.

  3. 개발 환경 설정: source 명령어의 실제 활용 사례인, 여러 환경 변수와 설정을 포함한 개발 환경 설정 스크립트를 작성해 보았습니다.

source 명령어는 Linux 스크립팅에서 다음과 같은 작업을 가능하게 하는 강력한 도구입니다:

  • 셸 세션 전반에 걸쳐 유지되는 환경 변수 설정
  • 세션 후반에 사용할 수 있는 함수 정의
  • 재사용 가능한 모듈식 설정 생성
  • 복잡한 환경을 빠르고 일관되게 설정

이러한 기술은 Linux 시스템을 다루는 모든 사람, 특히 개발자, 시스템 관리자, DevOps 엔지니어에게 필수적입니다. source 명령어를 마스터하면 Linux 환경을 관리하기 위한 더 효율적이고 체계적인 스크립트를 작성할 수 있습니다.