我正在使用Git Bash v1.8.1,带有一些别名(用于测试):
[alias]
ekko = !echo $1 && echo $1
ekko2 = !sh -c 'echo $1 && echo $1'
但是当我运行它们时,我看到了:
> git ekko master
master
master master
和
> git ekko2 master
(blank line)
(blank line)
我的预期行为是:
> git ekko master
master
master
我对别名很新 - 我正在寻找一种方法来确保我的参数被完全消耗,而不是附加到别名的末尾。一些调查表明这种行为在Git v1.7.x附近发生了变化,我还没有确定如何完成这个:
答案 0 :(得分:13)
你的ekko2
别名非常接近......你真正想要的是:
[alias]
ekko2 = !sh -c 'echo $1 && echo $1' -
执行shell命令的Git别名确实替换$n
变量,但它们还会将您传递给它们的任何参数附加到命令的末尾。因此,在您的第一个示例中,git ekko master
等同于echo master && echo master master
,它解释了其输出。
你的第二个例子更接近,但是你将“master”传递给sh
命令,这只是忽略了额外的参数。通过将-
添加到别名的末尾,您告诉sh
后面的参数是针对脚本sh
执行的,而不是sh
本身
答案 1 :(得分:5)
ekko2
最后缺少一个短划线:
[alias]
ekko2 = !sh -c 'echo $1 && echo $1' -
请参阅Git Wiki on Advanced aliases with arguments:
[alias]
example = !sh -c 'ls $2 $1' -
答案 2 :(得分:2)
你可以添加一个Bash noop命令":"最后:
git config --global alias.hello-world '!echo "$1"; :'
打印:
$ git hello-world hello world
hello world
答案 3 :(得分:0)
在使用标准命令行的Windows 10计算机上,需要将字符#
附加到别名的末尾,并将整个别名包裹在"
字符中。例如。
[alias]
ekko = "!echo $1 && echo $1 #"