我的大多数别名都是这种形式:alias p='pwd'
我想使用别名git commit
,以便它可以git commit -v
但是尝试创建带有空格的别名会出现错误:
$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
答案1
不是对您的问题的直接答案(因为别名只能是一个单词),但您应该使用git-config
:
git config --global alias.civ commit -v
这会创建一个 git 别名,以便git civ
运行git commit -v
.不幸的是,据我所知无法使用别名覆盖现有的 git 命令。但是,您始终可以选择一个合适的别名作为替代。
答案2
您正在谈论一个包含空格的命令,但这里的命令是git
并且其中没有空格。
拨打电话git 提交命令,你需要写它
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
命令,并且您需要将其别名为在其参数列表中的“commit”之后插入“-v”的内容。最好是使用@jw013的解决方案,但如果由于某种原因你不能或不会,你可以使用一个函数来完成这项工作,而不是使用别名:
git() {
if [ "$1" = commit ]; then
shift
set -- commit -v "$@"
fi
command git "$@"
}
答案3
在 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
答案4
尽管正确的解决方案是使用 jw013 建议的别名,但要使用空格创建别名,您可以嵌套别名。
例如,我有一个别名可以在本地和远程删除分支,但我希望用户始终指定分支:
remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"
#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'"