Quero definir facilmente um alias git-go
para esta linha de terminal:
git commit -m "init "; git push; git status
Então, quando eu entrar no git-go, essa linha deve entrar.
Como eu posso fazer isso? As respostas que eu vi abrangem apenas o alias de um comando sem parâmetros. Mas eu quero definir um alias para uma linha terminal arbitrária.
command-line
bash
alias
Philip Rego
fonte
fonte
Respostas:
Você faz isso da mesma maneira que definiria qualquer alias.
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, depoisgit 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
: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
: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: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 .
fonte
git-go
em seu PATH egit go
funcionará.Você pode declarar uma função no seu
~/.bash_aliases
arquivo da seguinte forma:ou você pode criar um alias no mesmo arquivo da seguinte maneira:
Não se esqueça de reabrir o seu terminal ou originar o arquivo (
. ~/.bash_aliases
) depois de alterá-lo.fonte
Ao lidar com
git
comandos, você também pode querer saber a sintaxe para adicionar um alias, especialmente paragit
:Isso adicionará um novo alias à sua
git
configuração local (at~/.gitconfig
) e permitirá que você emitaquando dentro de um
git
repositório. Sempre que você executagit go
um shell, é invocado e o comandogit commit -m "init"; git push; git status
é passado a ele.Veja a documentação do git para mais detalhes.
fonte
Foi um problema de cotação. Eu tinha tentado isso:
Mas recebi este erro:
Eu recebi esse erro porque estava usando aspas aninhadas incorretamente. Aqui está a sintaxe correta:
Ou:
Ou sem aspas, se não houver espaço em branco na mensagem de confirmação:
fonte
init
; os deleites do escudo'init'
,"init"
einit
o mesmo. (Portanto, convém adiar a versão original e também mostrar a nova versão, para ilustrar a situação em que são necessárias aspas aninhadas.) Quanto à possibilidade de adicionar o restante da mensagem, você pode transmiti-la como uma linha de comando argumento se (como mostrado em Videonauth e minhas respostas) você definiu uma função em vez de um alias. Por exemplo, você pode definirgit-go() { git commit -m "init $1"; git push; git status; }
(qual é o que tenho na minha resposta, mas com em"init $1"
vez de apenas"$1"
).