助けが必要です
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
「」
$export var1 = テスト 1 $ エクスポート var2 = テスト 2
$sh テスト.sh
正しい答えを得ました。
テスト1テスト2テスト1
しかし、yamlコンストラクタは関数間でtest3変数を失いました。
gitlab ciでtest.shを実行する方法を知っていますが、yamlでテキストとして実行する必要がありますが、どうすればよいですか?
ありがとう
答え1
で述べたように私の答え前の質問については、ここに文書を引用する必要があります。そうでない場合、bash -c
呼び出しシェルはスクリプトが実行される前に変数拡張(他の拡張を含む)を実行します。
スクリプトの各拡張子の周りに二重引用符を入れるのが最善ですbash -c
。
だから:
bash -s <<'END_SCRIPT'
test1 () {
echo "$var1"
test3=$var1
}
test2 () {
test1
echo "$var2"
echo "$test3"
}
test2
END_SCRIPT
bash
(スクリプトを明示的に実行しているので#!
- 行は必要ありません。)
here 文書の先頭に here 文書区切り文字を引用しない場合、スクリプトのbash -c
実行を開始したシェルはすべての変数を置き換えます。var1
と値が環境に存在すると仮定すると、var2
実行されるスクリプトは次のようになります。test1
test2
bash -s <<END_SCRIPT
test1 () {
echo "test1"
test3=test1
}
test2 () {
test1
echo "test2"
echo ""
}
test2
END_SCRIPT