在控制台中,是否可以更改为命令“环境”?为了解释一下,我以“git”为例。在编程和使用 git 存储库时,我更改为存储库路径,然后执行许多“git”命令,例如“git x ...”、“git y ...”等。所以我想要的是以某种方式将“更改为” “ git 这样我就不必一直输入“git”,只需输入“x ...”和“y ...”。或者这是您通常不想要的功能?
答案1
您要求的是“git shell”。似乎有一个名字叫git-sh
。
据我所知,没有通用的解决方案,但 git 并不是唯一一个具有自定义 shell 的程序,仅用于运行它自己的命令。类似的例子可能有mysql
、telnet
、ftp
等。实际上有相当多的程序确实有自己内置的 shell 环境,您可以选择将命令作为参数提供给它们,或者将它们作为 shell 启动并在内部运行命令。
沿着这些思路,制表符补全也很有用。一个好的制表符补全库将拥有像 git 这样的程序的所有可能的命令和参数。
注意:虽然“git shell”是这里的正确术语,但不要对“git-shell”项目感到困惑,该项目旨在替换系统登录 shell,仅为 git 操作提供有限的权限。
答案2
您可以在 shell 中将 git 命令定义为别名。当 git 命令也是 shell 命令时,您需要做出选择,例如git diff
, git mv
, … 该函数all_git_aliases_on
使所有 git 命令在没有git
前缀的情况下可用,而该函数仅在没有 shell 命令时才unambiguous_git_aliases_on
使 git 命令在没有前缀的情况下可用git
以这个名字。
该函数git_aliases_off
删除这些别名;如果您有与 git 命令同名的别名(例如alias mv='mv -i'
),它们将不会被恢复,您需要再次设置它们(将它们的定义添加到函数中git_aliases_off
)。
您可能想unambiguous_git_aliases_on
从您的~/.bashrc
或进行呼叫~/.zshrc
,或者提供toggle_git_aliases
一个简短的别名,例如g
。
git_commands=$(git help -a | grep '^ *[a-z]')
git_aliases=
all_git_aliases_on () {
for x in $git_commands; do
alias $x="git $x"
git_aliases="$git_aliases $x"
done
}
unambiguous_git_aliases_on () {
for x in $git_commands; do
if ! type $x >/dev/null 2>/dev/null; then alias $x="git $x"; fi
git_aliases="$git_aliases $x"
done
}
git_aliases_off () {
unalias $git_aliases
git_aliases=
}
toggle_git_aliases () {
if [ -n "$git_aliases" ]; then
all_git_aliases_on
else
git_aliases_off
fi
}
答案3
您可以通过在~/.bashrc
文件中创建别名来做到这一点,但要小心您选择的别名,因为这可能会导致您覆盖其他命令行程序/脚本。这是一个使用的示例ls
:
alias l = 'ls -Alh'
因此,当我l
在命令行中输入时,bash 会运行ls -Alh
。所以你可以这样做:
alias gx = 'git x'
alias gy = 'git y'
在你~/.bashrc
那时跑步gx
就会跑git x
。
我不知道有什么通用的解决方案适用于一般的程序。
答案4
我会做一个shell emulator
。它基本上是一个小脚本,会给您一个虚假的提示并接受某些输入值。例如,它可能看起来像这样:
user@host ~$ gitshell
Welcome to git-shell. Type help for command info
>> help
help - display this message
x - do x
y - do y
exit - close the shell
>> exit
user@host ~$
编码并不难(使用 python 或 perl 或其他东西),一旦你将它放入 $PATH 中,你就可以开始了。它可以用于 git、hg、svn 任何你想要的。只是一个想法,这就是我要做的。