3

I'm trying to get some nice output out of git:

FORMAT='%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'
LOG_PARAMS="--color --pretty=format:$FORMAT --abbrev-commit --no-walk"
function gch() {
  git log $LOG_PARAMS $(commits)
}

(where commits is a function that collects relevant commits). But I get this instead:

fatal: ambiguous argument '%(s)': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

Presumably that has something to do with the quoting and spaces, but I'm far from fluent in bash. Any help?

2
  • The function prefix is a bashism, and can be removed without changing anything.
    – l0b0
    Commented Sep 24, 2012 at 15:03
  • useful tip. I'd give your answer an upvote, too, but I don't have enough karma :-) Commented Sep 24, 2012 at 15:23

1 Answer 1

3

You have just suffered from word splitting - Use More Quotes™ and use arrays if you want to send multiple parameters to a command:

LOG_PARAMS=("--color" "--pretty=format:$FORMAT" "--abbrev-commit" "--no-walk")
...
    git log "${LOG_PARAMS[@]}" "$(commits)"

This works for me without the "$(commits)" part, which I guess is another function you created.

3
  • Thanks for the reply, but it doesn't quite work. If I run git log "$LOG_PARAMS" I get fatal: unrecognized argument: --color --pretty=format:%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset --abbrev-commit --no-walk. Is this because git is so 'special'? Commented Sep 24, 2012 at 14:55
  • Umm, sorry, didn't quite read that properly. I'll correct it.
    – l0b0
    Commented Sep 24, 2012 at 14:59
  • Excellent, that worked! Thank you very much! Commented Sep 24, 2012 at 15:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .