Alterar linha de comando “ambiente” para o comando de programas

5

Em um console, é possível mudar para um "ambiente" de comandos? Para explicar, tomo "git" como exemplo. Enquanto programando e usando um repositório git, eu mudo para o caminho de repos e então faço muitos comandos "git" como "git x ...", "git y ..." etc. Então o que eu quero é de alguma forma mudar "em "git para que eu não tenha que digitar" git "o tempo todo, apenas" x ... "e" y ... ". Ou este é um recurso que você normalmente não gostaria?

    
por user905686 22.08.2011 / 16:56

4 respostas

9

O que você está pedindo é um "git shell". Parece haver um lá fora pelo nome git-sh .

Não há uma solução generalizada que conheço, mas o git não é o único programa com um shell customizado apenas para executar seus próprios comandos. Exemplos semelhantes podem ser mysql , telnet , ftp , etc. Na verdade, existe um grande número de programas que possuem seus próprios ambientes de shell e você tem a opção de alimentá-los como argumentos ou iniciá-los como shells e executando os comandos internamente.

Também é útil ao longo destas linhas a conclusão da tabulação. Uma boa biblioteca de conclusão de abas terá todos os comandos e argumentos possíveis para um programa como o git na ponta dos dedos.

Nota: Enquanto "git shell" é a terminologia correta aqui, não fique confuso com o projeto "git-shell" que está projetado para substituir o shell de login do sistema para conceder permissões limitadas apenas para ações git .

    
por 22.08.2011 / 17:05
4

Você pode definir comandos git como aliases no shell. Você precisa fazer uma escolha quando um comando git também é um comando shell, por exemplo git diff , git mv ,… A função all_git_aliases_on disponibiliza todos os comandos git sem o prefixo git , enquanto a função unambiguous_git_aliases_on disponibiliza comandos git sem o prefixo git apenas se não houver uma shell comando por esse nome.

A função git_aliases_off remove esses aliases; se você tivesse aliases com o mesmo nome de um comando git (por exemplo, alias mv='mv -i' ), eles não seriam restaurados, você precisa defini-los novamente (adicione suas definições à função git_aliases_off ).

Você pode chamar unambiguous_git_aliases_on do seu ~/.bashrc ou ~/.zshrc ou atribuir toggle_git_aliases um alias curto, como 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
}
    
por 23.08.2011 / 01:04
1

Você pode fazer isso criando alias em seu arquivo ~/.bashrc , mas tenha cuidado nos aliases escolhidos, pois isso pode fazer com que você substitua outros programas / scripts de linha de comando. Aqui está um exemplo usando ls :

  alias l = 'ls -Alh'

Então, quando digito l na linha de comando, o bash executa ls -Alh . Então você poderia fazer algo como:

  alias gx = 'git x'
  alias gy = 'git y'

no seu ~/.bashrc , então a execução de gx seria executada em git x .

Eu não sei de uma solução genérica que funcionaria para programas em geral.

    
por 22.08.2011 / 17:05
0

Eu faria um shell emulator . É basicamente um pequeno script que lhe dará um prompt falso e aceita certos valores de entrada. Por exemplo, poderia ser assim:

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 ~$

Não é difícil codificar (use python ou perl ou algo assim) e, depois de colocá-lo em seu $ PATH, você está pronto para ir. Pode ser usado para git, hg, svn o que você quiser. Apenas uma ideia, é o que eu faria.

    
por 22.08.2011 / 19:03