Você faz isso da mesma maneira que definiria qualquer alias.
alias git-go='git commit -m "init "; git push; git status'
A situação em que fica complicado não é quando um alias executa um comando e passa argumentos para esse comando, nem mesmo quando um alias executa vários comandos separados por ;
, mas é quando você deseja que um alias aceite e use seus próprios argumentos de linha de comando .
Por exemplo, qualquer coisa que você escrever após o nome desse alias será colado no final e, portanto, passado como argumentos da linha de comando para o terceiro git
comando, depois git status
. (Na verdade, não é tanto que o texto a seguir é colado no final, mas o texto a seguir é deixado sozinho e o nome alternativo é substituído por sua definição.)
Portanto, você pode executar seu alias sem argumentos, o que funciona, e o último comando é git status
:
git-go
Ou você pode executá-lo com argumentos aos quais deseja passar git status
. Por exemplo, quando você executa dessa maneira, o último comando é git-status --show-stash
:
git-go --show-stash
O que você não pode fazer com um alias no Bash (e outros shells no estilo Bourne) é fazer com que o alias aceite argumentos da linha de comando e os coloque em outro lugar que não seja o final.
Por exemplo, suponha que você queira git-go
aceitar um argumento que ele usa para a mensagem de confirmação. Você não seria capaz de escrever isso como um alias. A solução seria escrevê-lo como uma função shell:
git-go() { git commit -m "$1"; git push; git status; }
Na definição de uma função shell, os parâmetros de posição $1
, $2
e assim por diante manter os valores dos argumentos de linha de comando passados para a função shell. Os aliases não têm funcionalidade que corresponda a isso, porque a expansão do alias é realmente uma forma de processamento de macro, ocorrendo muito cedo, quando o shell analisa um comando.
Obviamente, você pode escrevê-lo como uma função shell, mesmo que não precise usar parâmetros posicionais na definição, como sugere o Videonauth .