将命令行“环境”更改为程序命令

将命令行“环境”更改为程序命令

在控制台中,是否可以更改为命令“环境”?为了解释一下,我以“git”为例。在编程和使用 git 存储库时,我更改为存储库路径,然后执行许多“git”命令,例如“git x ...”、“git y ...”等。所以我想要的是以某种方式将“更改为” “ git 这样我就不必一直输入“git”,只需输入“x ...”和“y ...”。或者这是您通常不想要的功能?

答案1

您要求的是“git shell”。似乎有一个名字叫git-sh

据我所知,没有通用的解决方案,但 git 并不是唯一一个具有自定义 shell 的程序,仅用于运行它自己的命令。类似的例子可能有mysqltelnetftp等。实际上有相当多的程序确实有自己内置的 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 任何你想要的。只是一个想法,这就是我要做的。

相关内容