我想构造并执行以下git log语句,以获取特定作者昨天提交的摘要:name1
和name2
,因此最终所需执行的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[@]}"
但我仍然得到同样的错误
答案 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
我在本地进行了测试,效果很好。