我有一个带有执行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
序列。
答案 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步骤中运行良好。