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