[Shell Script] Mac에서 환경변수 값을 동적으로 변경하여 사용하기
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 값이 변경 및 설정된 것을 확인할 수 있다.