`terraform state show`出力をbash変数にパイプする方法は?

`terraform state show`出力をbash変数にパイプする方法は?

Bashスクリプトがあり、z = "y = x"の形式の文字列を分離して、値が "x"の環境変数をeval $z作成するために使用できるようにしています。yこれは私のコードです。

xxx=$(terraform state show aws_s3_bucket.prod_bucket | grep website_endpoint | sed 's/ //g')
echo $xxx
>>>website_endpoint="my-site.s3-website-us-east-1.amazonaws.com"
eval $xxx
>>>-bash: website_endpoint=my-site.s3-website-us-east-1.amazonaws.com: command not found

このコードの失敗による混乱は、ファイルの内容を.env作業環境変数に変換するのと非常によく似た作業を実行することです。

cmd=$(sed -ne '/^#/d; /^export / {p;d}; /.*=/ s/^/export / p' .env)
eval $cmd     ### works!

なぜ後者は機能し、前者は機能しないのですか?

編集:これで問題はbashではなくterraformにあることを確認したので、それを反映するようにタイトルを変更しました。

ベストアンサー1

さて、これがどこに行くのか知っています。デフォルトではterraform state show、コマンドには色、太字などのエスケープ文字が含まれます。残念ながら、これらの文字は端末にまったく表示されません。奇妙なことに、実際に何でも印刷するたびに目に見える効果が消えるように見えるからです!私の場合、$ xxxは次のようになります。

[1m[0mwebsite_endpoint[0m[0m="magnus-misc-v2.s3-website-us-east-1.amazonaws.com"

...[0mすべての書式と色を削除すると、ジャズが私の曲を台無しにするという視覚的な手がかりはありませんeval。だから私の解決策はそのterraform state show -no-colorフラグを使用することでした。実際にはbashの問題ではありませんが、terraform CLIには混乱する問題があります。

おすすめ記事