我有一个从docker调用的ci脚本。它用于在运行测试之前定义几个变量。这些变量的名称取决于ci配置中的另一个变量。
export ${VAR_FROM_CI_CONF^^}_FIRST_TEST_VAR="test"
export ${VAR_FROM_CI_CONF^^}_SECOND_TEST_VAR="test2"
在本地它可以工作,但是运行ci我得到syntax error: bad substitution
错误。似乎无法成功地将bash样式解释为大写。
我需要替换它,所以如果VAR_FROM_CI_CONF
是“ hi”,它将导出我:
export HI_FIRST_TEST_VAR="test"
export HI_SECOND_TEST_VAR="test2"
谢谢
答案 0 :(得分:1)
我建议将您容器中的默认外壳从/bin/sh
(或其他)更改为/bin/bash
。
这可以通过Dockerfile中的SHELL ["/bin/bash", "-c"]
命令来完成。因此,您将获得所有在bash
中执行的后续脚本命令,这些命令对^^
宏有很好的了解。
答案 1 :(得分:1)
自从您提到docker以来,我猜您可能有一个未安装bash的容器(它是Alpine吗?),并且您的脚本是使用内置的string^^
执行的。
无论如何,我相信您使用的$ apk add --no-cache bash
$ bash
$ HELLO=hi ; echo ${HELLO^^}
=> HI
语法要求bash 4.0及更高版本,因此您将需要安装bash。
如果您使用的是Alpine Linux:
Dockerfile
然后您应该走上正轨。
当然,如果您控制RUN apk add --no-cache bash
,请使用以下命令将软件包安装添加到其中:
#!/usr/bin/env bash
# ...
并在您的脚本中添加一个shebang,以确保使用bash执行该脚本:
public void Home1_Loaded(object sender, RoutedEventArgs e)
{
bdgb.Visibility = Visibility.Collapsed;
}