9

我正在使用 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 的某个地方发生了变化,我还没有确切地确定如何做到这一点:

Git Alias - 多个命令和参数

4

4 回答 4

16

您的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

于 2013-08-08T14:36:09.803 回答
5

ekko2最后缺少一个破折号:

[alias]
    ekko2 = !sh -c 'echo $1 && echo $1' -

请参阅Git Wiki on Advanced aliases with arguments

[alias]
    example = !sh -c 'ls $2 $1' -
于 2013-08-08T14:36:48.527 回答
4

您可以在末尾添加一个 Bash noop 命令“:”:

git config --global alias.hello-world '!echo "$1"; :'

印刷:

$ git hello-world hello world
hello world
于 2016-05-24T11:47:28.570 回答
1

在使用标准命令行的 Windows 10 机器上,该字符#需要附加到别名的末尾,并且整个别名都包含在"字符中。例如。

[alias]
    ekko = "!echo $1 && echo $1 #"
于 2019-05-29T08:28:28.283 回答