#bash #shell #alpine #ash
Вопрос:
Я пытался найти способ расширить переменную из строки (имя переменной), прочитанной из списка в файле.
Цель здесь состоит в том, чтобы оценить, присутствуют ли все переменные в конвейере gitlab, если нет, завершите конвейер.
Наилучшим возможным решением было бы иметь это в качестве однострочного и работающего из пепельной оболочки Alpine, но «что-то» bash-c также может сделать.
Очевидно, что есть проблема с (!) символом расширения, так как varcontent всегда пуст, но я просто не могу понять, что я делаю не так.
alpine314:~# cat checkvars.sh #!/bin/bash false=false while read -r line; do varcontent=${!line} if [ -z "$varcontent" ]; then echo "Error: Missing a required pipeline variable." false=true exit 1 else echo "$line: $varcontent" fi done lt; $1 alpine314:~# cat varsfile VAR1 VAR2 VAR3 alpine314:~# echo $VAR1 1 alpine314:~# echo $VAR2 2 alpine314:~# echo $VAR3 alpine314:~# bash -x checkvars.sh varsfile false=false read -r line varcontent= '[' -z '' ']' echo 'Error: Missing a required pipeline variable.' Error: Missing a required pipeline variable. false=true exit 1 alpine314:~#
Желаемое поведение здесь-выйти из сценария с ошибкой в случае, если какая-либо из переменных пуста/не задана.
Ура!
Комментарии:
1. Вам нужно экспортировать переменные, чтобы они были видны в оболочке, которая выполняет сценарий.
2. Либо эш, либо баш. Вы собираетесь использовать bash или ash?
Ответ №1:
что я делаю не так.
Ваши переменные не экспортируются. Выполните следующие действия перед запуском сценария.
export VAR1 VAR2 VAR3
Проверьте свои сценарии с помощью shellcheck. false=true
— было бы лучше использовать другое имя переменной…