如何为终端线设置别名?


9

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

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

因此,当我输入git-go时,应输入此行。

我怎样才能做到这一点?我看到的答案仅涵盖不带参数的命令的别名。但是我想为任意终端线设置别名。


你尝试了什么?您还阅读了哪些其他问题?askubuntu.com/q/17536/507051很好地解释了您的问题是什么?
甜点,

我的问题是使用双引号代替外部引号。
菲利普·雷哥

您也可以使用外部双引号和内部单引号的另一种方法。
Videonauth

Answers:


13

您可以使用设置任何别名的相同方法来执行此操作。

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

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

例如,您该别名的名称之后编写的所有内容都将粘贴到末尾,并作为命令行参数传递给第三个git命令after 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函数的命令行参数的值。别名没有与此相对应的功能,因为别名扩展实际上是宏处理的一种形式,发生在外壳解析命令时很早。

当然,即使您不需要在定义中使用位置参数(如Videonauth所建议的那样),也可以将其编写为shell函数。


1
更好的是:git-go在您的PATH中放置一个名为的脚本,git go它将起作用。
D. Ben Knoble

10

您可以在~/.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更改后,不要忘记重新打开终端或获取文件()。


1
编写shell函数而不是别名的一个好处是不需要嵌套引号。因此,这个答案解决了OP最终比我拥有的更直接的核心问题
伊利亚·卡根

@EliahKagan尽管您的问题更多,但这两个问题都很好。很高兴见到你回来。
Videonauth

4

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

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

这会将新的别名添加到本地git配置(位于~/.gitconfig),并允许您发出

git go

git存储库中时。每当您运行git go外壳程序时,就会调用该外壳程序并将命令git commit -m "init"; git push; git status传递给它。

有关 更多详细信息,请参见git documentaion


3

这是一个报价问题。我已经试过了:

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"

感谢您发布此答案(因为我的答案和Videonauth不太关注报价问题)。出于好奇,为什么要在提交消息中添加尾随空格?
伊利亚·卡根

我曾经手动粘贴此行,并在空格后添加了一条消息,但这在这里没有意义,因此我将其取出。
菲利普·雷戈

1
在这种情况下,您无需引用init;外壳对待'init'"init"init相同。(因此,您可能需要放回原始版本并显示新版本,以说明需要嵌套引号的情况。)至于能够添加其余消息,您可以将其作为命令行传递参数是否(如Videonauth和我的答案所示)定义了函数而不是别名。例如,您可以定义git-go() { git commit -m "init $1"; git push; git status; }(这就是我的答案,但使用"init $1"而不是"$1")。
Eliah Kagan

谢谢,这就是我接下来要尝试的内容。
菲利普·雷哥
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.