带参数的ZSH别名

时间:2015-12-17 17:20:24

标签: bash shell alias zsh zshrc

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

我见过Function可以用作别名,所以我尝试但我没有成功..

之前我有:

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"
}

(我知道这是一种可怕的混蛋练习)

6 个答案:

答案 0 :(得分:63)

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

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和衍生物可以,但是you shouldn't be using them anyway

答案 1 :(得分:49)

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

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

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

答案 2 :(得分:5)

我在.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,如函数所述。

答案 3 :(得分:4)

"git add ."以及"之间的其他命令只是bash的字符串,请删除"

您可能希望在if body中使用[ -n "$1" ]

答案 4 :(得分:0)

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

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

因此,基于git issue将语法更改为此,并且有效。

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

答案 5 :(得分:0)

带参数的别名

TL;DR:

使用带参数的别名:

alias foo='echo bar' 
# works:
foo 1
# bar 1
foo 1 2
# bar 1 2

扩展

(空格分隔)别名后的字符将被视为您编写它们的序列中的参数。

它们不能像功能一样被订购或更改。 例如在函数或子shell的帮助下,确实可以通过别名将参数放入命令中间: 见@Tom's answer

此行为类似于 bash