Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 行返回未与gitlab CI一起显示_Bash_Shell_Makefile_Yaml_Gitlab Ci - Fatal编程技术网

Bash 行返回未与gitlab CI一起显示

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: @

我有一个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:
    @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”?我的解决方案很难看…你知道吗?