Экспорт массива переменных среды bash / bitbucket конвейеры - PullRequest
1 голос
/ 10 марта 2020

У меня есть следующая переменная в настройках развертывания bitbucket:

CALLBACKS="https://myapp.com" "http://localhost:3000"

Мне нужно экспортировать ее в переменную окружения типа array, которая впоследствии будет прочитана сценарием. Я пытаюсь это, но это не работает:

read -a CALLBACKS_ARRAY <<< "${CALLBACKS}"
export CALLBACKS_ARRAY="$(echo ${CALLBACKS_ARRAY})"

1 Ответ

2 голосов
/ 10 марта 2020

Это не может быть сделано. Переменные среды разделены NUL; определения массива разделяют элементы с NUL. Таким образом, вы можете экспортировать переменную среды только в том случае, если она сериализована в строку, так что дочерний процесс может десериализовать ее в массив.

В отличие от этого, вы можете сделать экспорт BASH_ENV с именем файла, содержащим содержимое, которое при получении будет определять ваш массив.

Таким образом:

read -a CALLBACKS_ARRAY <<< "${CALLBACKS}"
BASH_ENV=$(mktemp -t bash_env.XXXXXX)
declare -p CALLBACKS_ARRAY >"$BASH_ENV"
export BASH_ENV

Обратите внимание, что совместимый /bin/sh читает ENV вместо BASH_ENV; тем не менее, поскольку массивы отсутствуют в базовом стандарте POSIX sh, здесь не нужно сильно беспокоиться об этом.

...