6

Possible Duplicate:
How to pass parameters to an alias?

I am trying to make a bash alias that will allow me to quickly make an archive of the current git repo.

My current alias is:

alias gitarch="git archive master --format=tar | gzip >$@"

This works great if I supply a destination file exactly like gitarch ~/Desktop/MyArchive.tar.gz but I want to be able to just type a filename and it will always save to the desktop with the tar.gz extension. I tried doing:

alias gitarch="git archive master --format=tar | gzip >~/Desktop/[email protected]"

... but it doesn't seem to work correctly.

Can anyone tell me the secret to getting this working?

Jeff Schaller
  • 66,199
  • 35
  • 114
  • 250
ThisDarkTao
  • 171
  • 1
  • 5
  • To help a little bit more, if you say `alias sayhello='echo "sayhello $@ and something else"'` and then you type `sayhello Dario` it will show `sayhello and something else Dario`. That is the problem of the $@ you used. You're creating a `.tar.gzYOURNAME` file, so that the file should be hidden =P – D4RIO Jan 13 '12 at 21:05

1 Answers1

10

The secret is simply creating a bash function instead - aliases don't support positional parameter substitution:

gitarch() { git archive master --format=tar | gzip >"$1"; }
Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
  • The only "thing" is that it will not be shown when you say just 'alias' – D4RIO Jan 13 '12 at 20:53
  • 2
    @D4RIO No problem, just use `set` to list the functions or `type`. –  Jan 13 '12 at 20:54
  • 1
    I would use `"$1"` instead of `$@`. – enzotib Jan 13 '12 at 21:26
  • Thank you, I've managed to get it working with all your help. I'm not exactly sure why this is flagged as duplicate, the other possible question was nothing like mine. – ThisDarkTao Jan 14 '12 at 09:55
  • @D4RIO you can always alias the function as `alias gita="gitarch"`. Not perfect but does make it show up. – Jim Jun 22 '18 at 15:34