Mic*_*ant 29 shell bash terminal git alias
我的大部分别名都是这种形式: alias p='pwd'
我想别名,git commit
以便它git commit -v
但是尝试使用空格创建别名会出现错误:
$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
Run Code Online (Sandbox Code Playgroud)
jw0*_*013 32
不是您问题的直接答案(因为别名只能是一个词),但您应该使用git-config
:
git config --global alias.civ commit -v
Run Code Online (Sandbox Code Playgroud)
这将创建一个 git 别名,以便git civ
运行git commit -v
. 不幸的是,AFAIK无法使用 aliases 覆盖现有的 git 命令。但是,您始终可以选择一个合适的别名作为替代。
Sté*_*las 17
你说的是一个包含空格的命令,但这里是命令git
,里面没有空格。
要调用git commit命令,您需要编写它
git\ commit ...
'git commit' ...
"git commit" ...
Run Code Online (Sandbox Code Playgroud)
通常命令的名称中没有空格,因为在 shell 中调用它们很麻烦,所以我认为您不会在系统上找到这样的命令。
csh、tcsh 或 zsh 将允许您对上述任何一个进行别名,但不能为 bash 或 ksh(虽然 pdksh 允许您但您不会让您使用它们)。在 zsh 中:
alias "'git commit'=git commit -v"
'git commit' ...
Run Code Online (Sandbox Code Playgroud)
将使git command
命令(仅在作为'git command'
(使用单引号)调用时)成为git
带有commit
和-v
参数的命令的别名。不过我猜不是你要找的东西。
因为alias
can only alias commands,所以您可以在此处别名是git
命令,并且您需要将其别名为在其参数列表中的“commit”之后插入“-v”的内容。最好是使用@jw013 的解决方案,但如果由于某种原因你不能或不会,而不是使用别名,你可以使用一个函数来完成这项工作:
git() {
if [ "$1" = commit ]; then
shift
set -- commit -v "$@"
fi
command git "$@"
}
Run Code Online (Sandbox Code Playgroud)
在 Bash 中,您不能为包含任何空格的命令创建别名。
但是,我在 .bashrc 中使用以下函数作为解决方法。
sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }
Run Code Online (Sandbox Code Playgroud)
它的工作原理是:您从要调用的命令开始。就我而言,它是sudo
.
然后,您提到需要哪些参数。在这种情况下,pacman -Syu
。
如果被触发,它应该执行什么命令?在上面的语句中是pacup.sh
。
否则,要执行什么命令,sudo $@
. $@
正如您已经猜到的,是命令采用的参数列表。
因此,为您的特定情况制作命令,它将是:
git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }
Run Code Online (Sandbox Code Playgroud)
但是,此解决方案适用于更一般的情况,即您希望使用空格对命令进行别名时。
在您的特定情况下,我建议您使用 jw013 的解决方案来为您的 git 命令使用别名git-config