shell 带参数的ZSH别名

b4qexyjb  于 2022-12-04  发布在  Shell
关注(0)|答案(7)|浏览(209)

我正在尝试为我的简单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"
}
4uqofj5v

4uqofj5v1#

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

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

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

6ss1mwsb

6ss1mwsb2#

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

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

fzwojiic3#

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

nzrxty8p

nzrxty8p4#

"git add .""之间的其他命令只是bash的字符串,请删除"
您可能希望在if主体中使用[ -n "$1" ]

s6fujrry

s6fujrry5#

我尝试接受的答案(Kevin的),但得到以下错误

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

pkbketx96#

我可以很容易地添加参数,只需使用$1。
例如:
alias gsf="git show --name-only $1"
工作得很好。我用gsf 2342aa225来调用它

alen0pnh

alen0pnh7#

带参数的别名

TL;DR:

使用带参数的别名:

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

已过期

(空格分隔)别名后面的字符将被视为您写入它们的顺序中的参数。
它们不能像函数那样被排序或改变。例如,通过别名将参数放在命令中间,在函数或子shell的帮助下确实是可能的:看@汤姆的回答
此行为类似于bash

相关问题