Bash 行返回未与gitlab CI一起显示
我有一个CI(git lab CI),它运行一个运行makefile作业的shell,该作业调用bash脚本。CI脚本是一个YAML(gitlab CI.yml)脚本 YAML脚本:Bash 行返回未与gitlab CI一起显示,bash,shell,makefile,yaml,gitlab-ci,Bash,Shell,Makefile,Yaml,Gitlab Ci,我有一个CI(git lab CI),它运行一个运行makefile作业的shell,该作业调用bash脚本。CI脚本是一个YAML(gitlab CI.yml)脚本 YAML脚本: Build: stage: ThisIsAnExample script: - export OPTION1=true; make -C build/ myTarget .ONESHELL: SHELL = /bin/bash .SHELLFLAGS = -ec myTarget: @
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
myTarget:
@echo "A";echo ""; print "B\n"; echo "C"; echo "";
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; export FORCE_LR_ESCAPE_IN_CI=yes; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
FORCE_LR_ESCAPE_IN_CI ?= no
ifeq ($(FORCE_LR_ESCAPE_IN_CI),yes)
NEW_LINE = printf '\u2000\n'
else
NEW_LINE = echo ''
endif
myTarget:
@echo "A"; $(NEW_LINE); echo "B"; $(NEW_LINE); echo "C"; $(NEW_LINE);
生成文件脚本:
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
myTarget:
@echo "A";echo ""; print "B\n"; echo "C"; echo "";
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; export FORCE_LR_ESCAPE_IN_CI=yes; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
FORCE_LR_ESCAPE_IN_CI ?= no
ifeq ($(FORCE_LR_ESCAPE_IN_CI),yes)
NEW_LINE = printf '\u2000\n'
else
NEW_LINE = echo ''
endif
myTarget:
@echo "A"; $(NEW_LINE); echo "B"; $(NEW_LINE); echo "C"; $(NEW_LINE);
如果从控制台运行bash脚本,我会得到:
A
B
C
在CI日志中,我得到:
A
B
C
为什么行返回不由gitlab CI解释?我找到了一个解决方法
我做了这些改变:
在我的YAML gitlab ci脚本中:
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
myTarget:
@echo "A";echo ""; print "B\n"; echo "C"; echo "";
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; export FORCE_LR_ESCAPE_IN_CI=yes; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
FORCE_LR_ESCAPE_IN_CI ?= no
ifeq ($(FORCE_LR_ESCAPE_IN_CI),yes)
NEW_LINE = printf '\u2000\n'
else
NEW_LINE = echo ''
endif
myTarget:
@echo "A"; $(NEW_LINE); echo "B"; $(NEW_LINE); echo "C"; $(NEW_LINE);
在我的makefile中:
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
myTarget:
@echo "A";echo ""; print "B\n"; echo "C"; echo "";
Build:
stage: ThisIsAnExample
script:
- export OPTION1=true; export FORCE_LR_ESCAPE_IN_CI=yes; make -C build/ myTarget
.ONESHELL:
SHELL = /bin/bash
.SHELLFLAGS = -ec
FORCE_LR_ESCAPE_IN_CI ?= no
ifeq ($(FORCE_LR_ESCAPE_IN_CI),yes)
NEW_LINE = printf '\u2000\n'
else
NEW_LINE = echo ''
endif
myTarget:
@echo "A"; $(NEW_LINE); echo "B"; $(NEW_LINE); echo "C"; $(NEW_LINE);
我发现gitlab ci跳过了一个“\n”,如果它不是由字符处理的。
在我看来像个虫子。无论如何,我在'\n'之前添加了一个不可见字符('\u2000'),它可以工作
注意:我试过使用
echo'\u2000'
,但它只在控制台中工作,在ci中不起作用。如果您的ci是web应用程序,则输出可能没有正确转义/格式化,因为html中的所有空白都算作一个。我会使用浏览器的开发工具检查web源代码;然后ESCAPE='\';否则逃逸=“”;printf“A${ESCAPE}\nB${ESCAPE}\nC${ESCAPE}\n”?我的解决方案很难看…你知道吗?