cria pseudo shell para um comando

3

Eu sinto que isso deve ser direto até certo ponto ...

Basicamente, para algum comando, eu quero ser capaz de invocar outro comando que irá escopo todos os parâmetros para esse comando. então ...

git commit -am "test"

se tornaria ...

./shell_comand git
>commit -am "test"
>status

Então, obviamente coisas como autocomplete e outras coisas não funcionariam, mas eu esperaria que isso fosse possível em algum grau? Eu não estou bem claro sobre como ...

    
por meesterfox 01.01.2013 / 19:19

2 respostas

1

Eu assumo que isso deve ser possível em git , mas como eu não sou um especialista em git eu usaria em funções de shell. Em um sh -compatível (por exemplo, bash ) você pode escrever facilmente uma função chamada git que será invocada em vez do binário git (tenha cuidado ao usar o caminho completo para o binário dentro da função - ou command git em BASH - para evitar recursão indesejada):

function git () {
    case "$1" in
    "commit")
        # do your stuff
        /path/to/git ...
        ;;
     *)
        # call git binary with the same arguments
        /path/to/git "$@"
        ;;
}

Você pode usar apenas o alias de comando ( alias ), mas as funções oferecem muito mais flexibilidade.

Quanto à conclusão, verifique a funcionalidade de conclusão do shell (por bash procurar por complete na página man) - certamente é possível fazê-lo funcionar e nem precisa ser muito complicado.

    
por 01.01.2013 / 19:44
0

Uma maneira seria definir aliases para cada comando git. Você ainda pode executar comandos comuns do shell; se isso não for desejado, defina PATH para um diretório inexistente. Se você deseja executar o comando shell e não o comando git, coloque uma barra invertida antes do comando (por exemplo, \rm foo para remover um arquivo).

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

No zsh, você ainda terá conclusão se tiver a opção complete_aliases definida. Eu não sei sobre o bash.

    
por 01.01.2013 / 20:00

Tags