我觉得这在某种程度上应该是直截了当的......
基本上,对于某些命令,我希望能够调用另一个命令,该命令将所有参数的范围限定为该命令。所以...
git commit -am "test"
会成为...
./shell_comand git
>commit -am "test"
>status
所以,显然像自动完成之类的东西是行不通的,但我希望否则这在某种程度上应该是可行的?我只是不太清楚如何...
答案1
我认为这本身应该是可行的git
,但由于我不是 git 专家,我会在 shell 函数中使用。在sh
兼容的(例如bash
)中,您可以轻松编写一个git
将被调用的函数,而不是git
二进制文件(请小心使用函数内部的二进制文件的完整路径 - 或command git
在 BASH 中 - 以防止不必要的递归):
function git () {
case "$1" in
"commit")
# do your stuff
/path/to/git ...
;;
*)
# call git binary with the same arguments
/path/to/git "$@"
;;
}
您可以只使用命令别名 ( alias
),但函数可以为您提供更大的灵活性。
至于完成,请检查您的 shell 完成功能(在手册页中bash
查找complete
)- 当然可以使其工作,甚至不必太复杂。
答案2
一种方法是为每个 git 命令定义别名。您仍然可以运行普通的 shell 命令;如果不需要,请设置PATH
为不存在的目录。如果您想运行 shell 命令而不是 git 命令,请在命令前添加反斜杠(例如,\rm foo
删除文件)。
git_commands=$(COLUMNS=2 git --help --all | sed -n -e '1,/^----/d' -e '1,/^$/p')
for c in $git_commands; do
alias "$c=git $c"
done
在 zsh 中,如果设置了该选项,您甚至可以完成complete_aliases
。我不知道bash。