【问题标题】:Stop shell from interpreting git log output停止 shell 解释 git log 输出
【发布时间】:2017-11-03 11:22:03
【问题描述】:

我有一个脚本,可以使用最近的提交消息在每个 Jenkins 构建上生成变更集。问题是作者名包含 \ 因为它具有域,所以当我写入文件时,shell 将 \ 解释为一个字母,我没有看到实际的 <domain>\<name>,而是看到类似 <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

而不是

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

有没有办法阻止 shell 解释“\”?

【问题讨论】:

    标签: git shell jenkins


    【解决方案1】:

    一个 POSIX read 手册页:

    默认情况下,除非指定了−r 选项,否则&lt;backslash&gt; 应充当转义字符。

    使用read -r item。

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

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

    并引用$BUILD_NAME。

    【讨论】:

    • 另外,使用printf "changeset: %s \r\n" "$item", printf`解释格式字符串中的%和\...
    • @Ryan♦ @jthill 谢谢你们。它就像一个魅力:)
    猜你喜欢
    • 1970-01-01
    • 2015-02-15
    • 2011-09-13
    • 1970-01-01
    • 2021-08-28
    • 2019-03-14
    • 1970-01-01
    • 2017-02-07
    • 2015-12-15
    相关资源
    最近更新 更多