Answers:
不是您问题的直接答案(因为别名只能是一个单词),但是您应该git-config
改用:
git config --global alias.civ commit -v
这将创建一个git别名,以便git civ
运行git commit -v
。不幸的是,AFAIK 无法用别名覆盖现有的git命令。但是,您始终可以选择一个合适的别名作为替代名称。
git
与别名的命令,与shell脚本的只是一点点。(顺便说一句,BTW我不是在发表评论,BTW。这个答案是在您发表后将近一年!我只是在发布它,希望人们能发现它对您有所帮助。)
您在说的是一个包含空格的命令,但是这里的命令已经git
存在,并且那里没有空格。
要调用git commit命令,您需要编写它
git\ commit ...
'git commit' ...
"git commit" ...
通常,命令的名称中没有空格,原因是在shell中调用它们很麻烦,因此,我认为您不会在系统上找到这样的命令。
csh,tcsh或zsh将允许您为上述任何别名加上别名,但bash或ksh则不允许别名(尽管pdksh允许您使用别名,但您不会使用它们)。在zsh中:
alias "'git commit'=git commit -v"
'git commit' ...
将使git command
命令(当称为'git command'
(仅带单引号)时)git
具有commit
和-v
参数的命令别名。不是我要找的东西。
因为alias
只能使用别名命令,所以您在此处可以别名的就是git
命令,您需要将别名别名为在其参数列表中的“提交”之后插入“ -v”的内容。最好是使用@ jw013的解决方案,但是如果出于某种原因您不能或不愿意,可以使用函数来代替别名,而不必使用别名:
git() {
if [ "$1" = commit ]; then
shift
set -- commit -v "$@"
fi
command git "$@"
}
在Bash中,您无法为其中带有任何空格的命令创建别名。
但是,我在.bashrc中使用以下功能作为解决方法。
sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }
工作原理是:从要调用的命令开始。就我而言sudo
。
然后,您提到需要什么参数。在这种情况下,pacman -Syu
。
如果触发,应执行什么命令?在上述声明中,它是pacup.sh
。
否则,将执行什么命令sudo $@
。$@
就像您已经猜到的那样,它是命令采用的参数列表。
因此,针对您的特定情况执行命令将是:
git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }
但是,此解决方案适用于更常见的情况,即您要为命令中的空格加上别名。
在您的特定情况下,我建议您使用jw013的解决方案来别名git命令,使用git-config
if [[ $1 == 'commit' ]]...
吗 $ @的扩展可能会包含更多您实际想要保留的args。
检查每个简单命令的第一个单词(如果未引用),以查看其是否具有别名。如果是这样,则将该单词替换为别名的文本。别名和替换文本可以包含任何有效的shell输入,包括shell元字符,但别名不能包含“ =”。
测试替换文本的第一个单词是否具有别名,但是与被扩展的别名相同的单词不会第二次扩展。例如,这意味着可以将ls别名为“ ls -F”,并且Bash不会尝试递归扩展替换文本。
因此,由于只检查了第一个单词,因此不能有多个单词的别名。在此超级用户问题中,提供了使用函数的解决方法:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
可以适应git
。
\ls
绕过别名ls
。
[_!%,@]
,必须扩展与有效别名(仅是ASCII alnum + )匹配的未加引号的单词。它不禁止扩展名,例如zsh的别名'\ ls'或ksh / dash / bash / zsh的别名别名,a-b
否则将不存在任何POSIX shell。它只是说一个可移植的脚本(不是shell)不应该使用任何这样的别名。
'git commit'
在POSIX Shell中的命令位置中编写命令,则它必须调用内置实用程序,函数或外部命令。
git config
不是的问题git-config