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$'
)