停止shell解释git log输出

时间:2017-11-03 11:22:04

标签: git shell jenkins

我有一个脚本,可以使用最近的提交消息在每个Jenkins构建上生成变更集。问题是作者名称包含\因为它有域,所以当我写入文件时,shell将\作为一个字母解释,我不会看到实际的<domain>\<name>,而是看到像{ {1}}。 我目前的脚本如下:

<domain><name>

作为输出示例,我得到类似的内容:

  git --git-dir=<git dir> log origin/${BUILD_NAME} --since \"$sinceDate\" --graph --oneline --pretty="%h %<(28)%ci %<(20)%an: %s" | while read item
  do
    printf "changeset: $item \r\n" >> //<destination>//change_set_${WEEK_NUMBER_DATE_HOUR}.txt;
  done

而不是

changeset: * 0e27e683b 2017-09-26 09:35:16 +0300    SROjohn        : #task #18856

有没有办法阻止shell解释&#34; \&#34;?

1 个答案:

答案 0 :(得分:3)

POSIX read联构帮助页:

  

默认情况下,除非指定−r选项,否则<backslash>将充当转义字符。

使用read -r item

并且,正如@jthill所添加的,printf的常量格式字符串:

printf 'changeset: %s \r\n' "$item" >> "//<destination>//change_set_${WEEK_NUMBER_DATE_HOUR}.txt"

并引用$BUILD_NAME