Buildspec, Codebuild, AWS의 STDOUT에서 배열을 선언하는 방법

Buildspec, Codebuild, AWS의 STDOUT에서 배열을 선언하는 방법

AWS Codebuild의 일부인 Buildspec의 STDOUT에서 배열을 선언하는 데 문제가 있습니다. Pure Bourne Shell 빌드 사양을 사용하면 내 코드에서 이 줄을 사용할 수 없습니다 declare -a available_envs=($(eb list --all)).available_envs=($(eb list --all))

some build command...

eb list --all # list all created env in Elastic Beanstalk

declare -a available_envs=($(eb list --all)) # <<< here is a problem because I can't create array this way.
echo ${available_envs[@]} # <<< checking if variabla have all available env 

if [[ ${available_envs[*]} =~ 'develop' ]]; then
    echo 'Develop environment is allready created.'
    else
        echo "Creating Develop environment..."
        eb create develop
fi

some build command...

미리 감사드립니다.


편집하다:

명령 출력eb list --all

develop
production
stage

해결책: 관점을 바꿔주신 @faho에게 감사드립니다.

grep명령 전에 출력을 약간 자릅니다.

some build command...
envs=$(eb list --all | tr -d " \t\r" | tr -d [*] | grep "develop")
echo ${envs}

if [ "${envs}" = "develop" ]; then
        echo 'Develop environment is already created.'
        else
                echo "Creating Develop environment..."
fi
some build command...

답변1

Posix sh에는 임의의 배열 변수나 조건이 없습니다 [[ .. ]]. 여기에는 위치 매개변수가 있지만 여기에서의 비교도 작동하지 않으므로 $@설정( 사용 set)은 별로 도움이 되지 않습니다.

그래서 다른 사고방식이 필요합니다. 이 출력으로 무엇을 하려는지 파악하고 그에 따라 행동해야 합니다.

현재 코드를 사용하면 다음을 수행할 수 있습니다.

if eb list --all | grep -q develop; then

출력이 다시 필요하고 다시 호출하고 싶지 않은 경우 eb list --all문자열로 변수에 저장하고 나중에 사용할 수 있습니다.

envs=$(eb list --all)

if printf '%s\n' "$envs" | grep -q develop; then

(참고: grep -q develop하위 문자열 "develop"이 포함된 모든 행과 일치합니다. 그렇지 않은 경우에는 다음을 수행할 수 있습니다 grep -q '^develop$')

관련 정보