带参数的ZSH别名


98

我正在尝试为我的简单git add / commit / push创建一个带参数的别名。

我已经看到功能可以用作别名,所以我尝试但我没有做到..

在我之前:

alias gitall="git add . ; git commit -m 'update' ; git push"

但是我希望能够修改我的提交:

function gitall() {
    "git add ."
    if [$1 != ""]
        "git commit -m $1"
    else
        "git commit -m 'update'"
    fi
    "git push"
}

(我知道这是一个可怕的git实践)

Answers:


117

您不能使用arguments *创建别名,它必须是一个函数。您的函数很接近,您只需要引用某些参数而不是整个命令,并在中添加空格[]

gitall() {
    git add .
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
}

*:大多数shell都不允许使用别名中的参数,我相信csh和派生类都可以,但无论如何您都不应使用它们


csh有,但根本没有功能。(我不知道是否有函数,因为别名可以接受参数,或者别名是否有参数,因为没有函数,等等)
chepner 2015年

因此,您会称呼它(从外壳)像gitall "my commit message"?还是您称其为gitall('my commit message')
archae0pteryx

@ archae0pteryx函数的调用与其他任何命令一样,因此gitall "my commit message"
凯文

我建议getall() {没有上述内容function-当然,在zsh中这是合法的,但是唯一的更改将使它与所有POSIX兼容的shell兼容。
查尔斯·达菲

10
顺便说一句,如果您使用了git commit -m "${1:-update}"(提供了默认扩展的参数扩展),则根本不需要该if语句。
查尔斯·达菲

108

如果出于某种原因确实需要使用别名作为参数,则可以通过在别名中嵌入函数并立即执行来破解它:

alias example='f() { echo Your arg was $1. };f'

我看到这种方法在.gitconfig别名中使用了很多。


7
如此朴实却又如此美丽
洛可可式

14
为什么要全称别名?只需调用该函数即可example
Tripleee '18

1
同样,迟来的是,在右括号之前需要使用分号。
三月

真漂亮 有了这个,我能够创建一个别名,将别名添加到rc文件,然后重新加载所述rc文件。❤️alias addalias ='f(){echo“ alias” $ 1 >>〜/ .zshrc &&。〜/
.zshrc

6
无需在全局范围内添加任何名称,只需使用匿名函数即可:alias example='(){ echo Your arg was $1. ;}'
maoizm

11

我在.zshrc文件中使用了此功能:

function gitall() {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update # default commit message is `update`
    fi # closing statement of if-else block
    git push origin HEAD
}

这里git push origin HEAD负责将您当前的分支推送到远程。

在命令提示符处运行以下命令: gitall "commit message goes here"

如果我们只是运行gitall而没有任何提交消息,那么该提交消息将update与函数所说的一样。



0

我尝试了接受的答案(凯文),但收到以下错误

defining function based on alias `gitall'
parse error near `()'

因此,根据git问题将语法更改为此,并且它起作用了。

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.