需要帮忙
我正在学习 bash 和 gitlab
无法让它工作
gitlab管道.gitlab-ci.yml
variables:
var1: test1
var2: test2
stages:
- build
build-job:
stage: build
script:
- |
bash -s << EOF
#!/bin/bash
test1 () {
echo $var1
test3=$var1
}
test2 () {
test1
echo $var2
echo $test3
}
test2
EOF
'''
得到了错误的答案
'''
执行作业脚本的“step_script”阶段 00:00
$ bash -s << EOF # 折叠多行命令
测试1
测试2
作业成功
丢失变量测试3
'''
只是相同的 bash 脚本 test.sh
#!/bin/bash
test1 () {
echo $var1
test3=$var1
}
test2 () {
test1
echo $var2
echo $test3
}
test2
'''
$导出var1 =测试1 $导出var2 =测试2
$sh 测试.sh
得到了很好的答案这是正确的:
测试1 测试2 测试1
但 yaml 构造在函数之间丢失了变量 test3
我知道来自 gitlab ci 的 run test.sh,但我需要在 yaml 中以文本形式运行它,我该怎么做?
谢谢
答案1
正如中提到的我的答案对于您之前的问题,需要引用此处文档。如果不是,则在bash -c
脚本运行之前,调用 shell 将执行变量的扩展(以及任何其他扩展)。
如果您还在脚本中对每个扩展加双引号,那就最好了bash -c
。
所以:
bash -s <<'END_SCRIPT'
test1 () {
echo "$var1"
test3=$var1
}
test2 () {
test1
echo "$var2"
echo "$test3"
}
test2
END_SCRIPT
(请注意,由于您显式运行脚本bash
,因此不需要#!
- 行。)
如果您不在此处文档的开头引用此处文档分隔符,则为运行bash -c
脚本而启动的 shell 将替换所有变量。假设var1
和作为值和var2
存在于环境中,将执行的脚本等效于以下内容:test1
test2
bash -s <<END_SCRIPT
test1 () {
echo "test1"
test3=test1
}
test2 () {
test1
echo "test2"
echo ""
}
test2
END_SCRIPT