如何为终端线路设置别名?

如何为终端线路设置别名?

我想轻松地git-go为此终端线路设置一个别名:

git commit -m "init "; git push; git status

所以当我输入 git-go 时应该输入这一行。

我该怎么做?我看到的答案仅涵盖不带参数的命令的别名。但我想为任意终端线路设置别名。

编辑: 我学过使用函数而不是别名,因为

有关别名的定义和使用的规则有些令人困惑。

对于几乎所有目的而言,shell 函数都比别名更受欢迎。

因此,除非必须,否则请不要使用别名。 https://ss64.com/bash/alias.html

答案1

执行此操作的方式与设置任何别名的方式相同。

alias git-go='git commit -m "init "; git push; git status'

棘手的情况是不是当别名运行命令并将参数传递给该命令时,甚至当别名运行由 分隔的多个命令时;,而是当您希望别名接受并使用它自己的命令行参数时。

例如,你写的任何内容该别名的名称将被粘贴到末尾,从而作为命令行参数传递给git后面的第三个命令git status。(实际上,与其说下面的文本被粘贴到末尾,不如说下面的文本保持不变,而别名名称被其定义替换。)

因此,您可以不带参数运行别名,这是可行的,最后一个命令是git status

git-go

或者,你可以使用要传递给的参数来运行它git status。例如,当你以这种方式运行它时,最后一个命令是git-status --show-stash

git-go --show-stash

不能在 Bash(和其他 Bourne 风格的 shell)中使用别名的目的是使别名接受命令行参数并将它们放置在末尾以外的其他地方。

例如,假设您想要git-go接受用于提交消息的参数。您无法将其写为别名。解决方案是将其写为 shell 函数:

git-go() { git commit -m "$1"; git push; git status; }

在 shell 函数的定义中,位置参数$1$2等保存传递给 shell 函数的命令行参数的值。别名没有与此相对应的功能,因为别名扩展实际上是一种宏处理形式,在 shell 解析命令时很早就发生了。

当然,即使你不需要在定义中使用位置参数,你也可以将其编写为 shell 函数,如下所示Videonauth建议

答案2

您可以在~/.bash_aliases文件中将其声明为一个函数,如下所示:

git-go(){
    git commit -m "init "
    git push
    git status
}

或者您可以在同一个文件中创建别名,如下所示:

alias git-go='git commit -m "init "; git push; git status'

. ~/.bash_aliases更改文件后,请不要忘记重新打开终端或获取文件( )。

答案3

在处理git命令时,您可能还想知道添加别名的语法,尤其是对于git

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

这将向您的本地git配置(at ~/.gitconfig)添加一个新别名,并允许您发出

git go

当在git存储库中时。每当您运行git goshell 时,都会调用该 shell 并将命令git commit -m "init"; git push; git status传递给它。

git 文档 了解更多详情。

答案4

这是引用问题。我尝试过这个:

alias="git commit -m "init "; git push; git status"

但出现此错误:

bash: ; git push; git status: command not found

我之所以出现这个错误,是因为我错误地使用了嵌套引号。以下是正确的语法:

alias='git commit -m "init "; git push; git status'

或者:

alias="git commit -m 'init '; git push; git status"

如果提交消息中没有空格,则不加引号:

alias="git commit -m init; git push; git status"

相关内容