Mac/Utiility

[Shell Script] Mac에서 환경변수 값을 동적으로 변경하여 사용하기

mystic-agit 2024. 9. 12. 20:22

 

Mac에서 bash_profile 또는 zshrc에 선언되어 있는

'export {변수명}="{경로}"' 로 이루어진 값들을

스크립트 코드 호출 때 동적으로 변경할 필요가 있었다.

 

예를 들어,

하나의 빌드 머신에 Unreal 5 또는 Unreal 4의 여러 버전이 설치되어 있는 경우

commandLine을 통한 빌드 명령을 내릴 시 어느 엔진을 사용할지 코드에 알려줘야할 필요가 있다.

# zshrc
export UE_ROOT="..(생략)../UE5"
# my_build_script.sh
UE_ROOT = $UE_ROOT

sh "$UE_ROOT/Engine/Build/BatchFiles...(생략)..."

# 이런 my_build_script.sh 코드는 여러 Unreal 프로젝트에서 빌드를 위해 사용될 수 있지만
# UE_ROOT가 하나로 고정되어 있다면 재활용이 불가능하다.

 

 

위와 같은 my_build_script.sh 를 재활용하기 위해

UE_ROOT를 동적으로 변경하는 스크립트와

해당 스크립트를 호출하는 방법을 정리해보았다.

 

(1) 변수를 변경하는 코드 구성하기

# change_export.sh

set_path_A() {
    if grep -q "^export UE_ROOT=" "$HOME/.zshrc"; then
    	sed -i "" "s|^export UE_ROOT=.*|export UE_ROOT=\"/Users/shared/Epic Games/UE_5.4" "$HOME/.zshrc"
    else
    	echo "not found export UE_ROOT"
    fi
    
    source "$HOME/.zshrc"
}

set_path_B() {
    if grep -q "^export UE_ROOT=" "$HOME/.zshrc"; then
    	sed -i "" "s|^export UE_ROOT=.*|export UE_ROOT=\"/Users/shared/Epic Games/UE_5.3" "$HOME/.zshrc"
    else
    	echo "not found export UE_ROOT"
    fi
    
    source "$HOME/.zshrc"
}

 

set_path_A() 함수는 UE_ROOT라는 값을 .../UE_5.4로 변경한다. (zshrc 텍스트에서 직접)

set_path_B() 함수는 UE_ROOT라는 값을 .../UE_5.3로 변경한다. (zshrc 텍스트에서 직접)

그리고 source 명령으로 zshrc를 호출하여 나의 스크립트 전체 세션을 업데이트한다. (현재 설정된 zshrc로 변수 값들이 갱신되어 영향을 줌)

 

그리고, sh 스크립트 호출 시 "sh {파일명}.sh"로 호출하게 되면 "sh {파일명}.sh param1" 과 같이 파라메터를 넣어서

분기를 수행할 수 있으나

위 코드는 스크립트 이후 전체 세션에도 영향을 주도록 "source {파일명}.sh"로 호출해야하기 때문에 파라메터를 사용할 수 없다. (source 명령으로는 파라메터 전달 불가)

 

때문에 위처럼 2개의 경우의 함수를 만들고 아래처럼 호출한다.

 

(2) 함수 호출하기

# in terminal..

# 방법 1 : (원라인 코드) source로 파일 호출 및 이어서 함수 호출
> source change_export.sh && set_path_A

# 방법 2 : (라인별 호출) source로 파일 호출 후 함수 호출
> source change_export.sh
> set_path_A

 

이렇게 호출하고 echo UE_ROOT를 호출해보거나,

'open ~/.zshrc' 호출을 해보면 UE_ROOT 값이 변경 및 설정된 것을 확인할 수 있다.