Как направить вывод `terraform state show `в переменную bash?

Предполагая, что имена файлов и каталогов следуют одному и тому же соглашению об именах в том смысле, что они имеют общий префикс группировки, за которым следует точка, и предполагая, что мы не знаем суффиксов имен файлов или каталогов:

topdir=.

for dirname in "$topdir"/*/; do
    prefix=$( basename "$dirname" )  # $topdir/FileC.directory/ --> FileC.directory
    prefix=${prefix%%.*}             # FileC.directory          --> FileC

    for filename in "$topdir/$prefix".*; do
        if [ ! -d "$filename" ]; then
            mv -i "$filename" "$dirname"
        fi
    done
done

Внешний цикл перебирает все каталоги в каталоге $topdir(, здесь установленном на ., текущем каталоге ). $prefixбудет базовым именем имени каталога с удаленным битом после первой точки.

После того, как префикс был вычислен, файлы )не из -каталогов (в том же каталоге $topdir, которые имеют один и тот же префикс, перемещаются в каталог.

-1
27.01.2020, 06:35
2 ответа

Хорошо, я понял, что здесь происходит. Команда terraform state showпо умолчанию будет включать escape-символы для цвета, жирности и т. д. К сожалению, эти символы вообще не отображаются в терминале, потому что, как ни странно, они, кажется, отключают любой видимый эффект всякий раз, когда он фактически переходит к напечатать что угодно! Итак, в моем случае $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.

1
28.01.2020, 05:11

Всякий раз, когда у вас есть строка, представляющая строковое присвоение переменной, безопасный и простой способ выполнить это назначение —declareИспользование More Quotes™):

$ xxx='website_endpoint="my-site.s3-website-us-east-1.amazonaws.com"'
$ declare "$xxx"
$ echo "$website_endpoint"
"my-site.s3-website-us-east-1.amazonaws.com"
1
28.01.2020, 05:11

Теги

Похожие вопросы