[Cross-platform] bash 사용자를 위한 윈도우 batch 스크립트 Develop Tip


윈도우에 배치파일 작성 이라고는 30년 전쯤 DOS로 무언가를 하던때로 거슬러 올라갑니다.
그럼에도 불구하고 막상 배치로 무언가를 짜려고 하면 항상 막막~ 한것이 사실입니다.

다음과 같이 Mac과 Linux에서 잘 동작하는 쉘 스크립트를 작성해 놓았습니다.

#!/bin/bash

# 1) 쉘 스크립트가 있는 디레터리 위치 구함
WDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
echo "working directory for build_all is \"${WDIR}\""

# 2) 해당 디렉터리에서 재귀적으로 build.sh 를 구하여 $bf로 작업
for bf in $(find ${WDIR} -name "build.sh");do
    echo "building ${bf} ..."
    BDIR=$(dirname ${bf})
    python3 ${WDIR}/change_version.py ${BDIR}/setup.yaml
    pushd ${BDIR}
        bash build.sh
        if [ $? -ne 0 ];then
            echo "Error!!!"
            exit 9
        fi
    popd
    echo "building ${bf} done!"
done
echo "Build All is done!"
exit 0

그냥 쉽게 설명하면 
/home/toor/mywork 안에
build_all.sh 라고 하는 위와 같은 내용이 있고,
다시 이 폴더 안에 각각의 하위 폴더들이 있어
해당 디럭테리로 이동하여 build.sh 를 
수행하는 것입니다.
위와 같은 스크립트는 뭐 30분 내에 작성하고 테스트하고는 합니다만,

문제는 윈도우에 동일한 기능을 bat 배치 파일로 만드는 것입니다.

약 몇시간의 삽질 끝에 동일 기능 구현 및 테스트를 하였습니다.

REM @echo off

REM 1) 쉘 스크립트가 있는 디렉터리로 이동
PUSHD %~dp0
set WDIR=%CD%
echo "working directory for build_all is \"%WDIR%\""

REM 2) 해당 디렉터리에서 재귀적으로 build.sh 를 구하여 $bf로 작업
for /f "tokens=*" %%a in ('dir /s/b build.bat') do call :processline %%a

goto :eof

REM %bf%에 작업할 build.bat 패스가 들어 있음
:processline
    set bf=%*
    echo %bf%
    for %%F in (%bf%) do set dirname=%%~dpF
    echo "building %dirname% ..."
    C:\Python37-64\python.exe %WDIR%\change_version.py %dirname%\setup.yaml
    pushd %dirname%
        CALL build.bat
    popd
    goto :eof

:eof
POPD
echo "Build All is done!"

하나 하나 설명하려면 또 시간이 많이 걸릴 것 같아,
담에 읽으면서 또 해 볼까 합니다.


그래도 어느분께는 도움이 되셨기를..








핑백

덧글

댓글 입력 영역

구글애드텍스트