【问题标题】:ASH/BASH in Alpine: how to expand a variable from a list of variable names read from a list fileAlpine 中的 ASH/BASH:如何从从列表文件读取的变量名列表中扩展变量
【发布时间】:2021-11-11 17:19:33
【问题描述】:

我一直在尝试找出一种方法来扩展从文件中的列表读取的字符串(变量名)中的变量。

这里的目标是评估 gitlab 管道中的所有变量是否都存在,如果不存在,则使管道失败。

最好的解决方案是将其作为单线并使用 Alpine 的 ash shell 工作,但 bash -c "something something" 也可以。

显然 (!) 扩展字符存在问题,因为 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 < $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:~#

此处所需的行为是在任何变量为空/未设置的情况下以错误退出脚本。

干杯!

【问题讨论】:

  • 您需要导出变量,以便它们在执行脚本的 shell 中可见。
  • 无论是 ash 还是 bash。你打算使用 bash 还是 ash?

标签: bash shell alpine ash


【解决方案1】:

我做错了什么。

您的变量未导出。在运行脚本之前运行以下命令。

 export VAR1 VAR2 VAR3

用 shellcheck 检查你的脚本。 false=true - 最好使用不同的变量名...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多