Jenkins shell字符串引用替换

时间:2016-06-02 13:36:19

标签: linux bash shell jenkins

我有一个带有执行shell框的Jenkins作业。在执行shell中,我使用bash而不是dash(sh)。在执行shell中,我有一些字符串,它们应该被解释为包含转义序列(在本例中是新行:\n),所以这里是一个示例执行shell:

#!/bin/bash
set -x #echo on
git fetch
...

git commit -m "Merging $DEVELOPEMENTBRANCH into $INITIALBRANCH\n\nThis is an example second paragraph."
...

我的问题是,Jenkins以改变其行为的方式解释/替换脚本块,具体来说它替换变量并用单引号替换双引号,因此在控制台输出中它看起来像这样:

[4] $ /bin/bash /tmp/hudson7542128982632971668.sh
+ git fetch
...

+ git commit -m 'Merging my_feature into develop\n\nThis is an example second paragraph'
...

但是这样,由于单引号,\n部分不会被解释。这里的诀窍是什么?我想保留双引号或至少解释\n序列。

1 个答案:

答案 0 :(得分:0)

git commit -m "A multi-line\n\ncommit message"不会生成多行 无论如何提交消息。提交消息的字面意思是A multi-line\n\ncommit message。 双引号不会导致bash解释printf转义序列。

要获得您需要的多行提交消息:

git commit -m "`printf \"A multi-line\n\ncommit message\"`"

这在Jenkins shell步骤中运行良好。