使用bash脚本构建git log语句,抛出含糊不清的参数'%an'错误

时间:2016-04-19 11:30:10

标签: git bash

我想构造并执行以下git log语句,以获取特定作者昨天提交的摘要:name1name2,因此最终所需执行的git log应如下所示:< / p>

git log --author name1 --author name2 
        --since yesterday --reverse
        --pretty=format:"%h - %an , %ad : %s" > commits.txt

您可能会注意到输出被重定向到commits.txt文件。

输出commits.txt文件最终应该包含一些这样的文本:

350411e - name1, Mon Apr 18 18:03:01 2016 +0200 : Fix bug X
366411e - name2, Mon Apr 18 18:05:06 2016 +0200 : Introduce feature Y
752411e - name1, Mon Apr 18 18:11:12 2016 +0200 : Merge version Z

这是我在script.sh

中的代码
team=( name1 name2 )

function create_commits_log_file () {
    authors=''
    for author in "${@}"
    do
        authors="$authors --author $author "
    done
    git_log_statement="git log $authors --since yesterday --reverse --pretty=format:\"%h - %an , %ad : %s\" > commits.txt"
    echo "$git_log_statement"
    $git_log_statement
}

create_commits_log_file "${team[@]}"

不幸的是,当我将其作为bash script.sh运行时,它会抛出一个错误:

  

git log --author name1 --author name2 --since yesterday --reverse   --pretty = format:&#34;%h - %an,%ad:%s&#34; &GT; commits.txt

     

致命:含糊不清的论点&#39;%&#39;:未知的修订或路径不在   工作树。

     

使用&#39; - &#39;将路径与修订分开,如下所示:&#39; git   [...] - [...]&#39;

尽管如此,如果我在控制台上运行echo&#39; ed git命令,它可以完美运行!

有什么问题?我该怎么办呢?

更新 - 尝试:

根据评论,我还尝试直接执行git log命令,而不将其存储在变量中,如下所示:

team=( ashraf.bashir diego.palacios )

function create_commits_log_file () {
    authors=''
    for author in "${@}"
    do
        authors="$authors --author $author "
    done
    git log $authors --since yesterday --reverse --pretty=format:\"%h - %an , %ad : %s\" >commits.txt
}

create_commits_log_file "${team[@]}"

但我仍然得到同样的错误

1 个答案:

答案 0 :(得分:1)

这是我们按照I'm trying to put a command in a variable, but the complex cases always fail!中描述的那种情况之一:将命令存储在变量中,当您尝试执行它时,失败。

而不是说

var=command   # store command
$var          # execute it

执行它:

command

在您的情况下,而不是

git_log_statement="git log $authors --since yesterday --reverse --pretty=format:\"%h - %an , %ad : %s\" > commits.txt"
$git_log_statement

简单地说。

git log $authors --since yesterday --reverse --pretty=format:"%h - %an , %ad : %s" > commits.txt

我在本地进行了测试,效果很好。