Deseja inserir um cd em um script bash e, em seguida, executar o comando "git checkout"

0

Estou tentando criar um arquivo que possa ser executado a partir da linha de comando:

.bashrc

export gorepo="cd /home/pol/dcu/practicum/gitrep"

e também

alias gorepo="/home/pol/dcu/practicum/gitrep"

Em um arquivo executável em $ PATH

#!/bin/bash
gorepo # gorepo is defined in .bashrc
git checkout

Eu tentei várias combinações de exportação, alias e usando variáveis de shell e funções bash sem sucesso - estou no fim da minha inteligência!

Como eu crio um comando que simplesmente vai para o meu repositório e então executa o git checkout e me retorna ao shell no diretório do repo?

    
por Vérace 03.10.2018 / 16:46

3 respostas

2

Isto declara uma variável chamada gorepo contendo o texto literal cd /home/pol/dcu/practicum/gitrep :

export gorepo="cd /home/pol/dcu/practicum/gitrep"

Isto declara um comando (alias) chamado gorepo que executa o programa /home/pol/dcu/practicum/gitrep :

alias gorepo="/home/pol/dcu/practicum/gitrep"

Isso tenta usar um alias que não esteja definido no contexto do script de shell:

#!/bin/bash
gorepo # gorepo is defined in .bashrc
git checkout

O que eu acho que você quer é este programa, que irá mudar o diretório para a duração do script e verificar o seu código:

#!/bin/bash
cd /home/pol/dcu/practicum/gitrep
git checkout

Ou esse alias (adequado para .bashrc ), que mudará de diretório no contexto atual do shell e, em seguida, verificará seu código:

alias gorepo='cd /home/pol/dcu/practicum/gitrep && git checkout'
    
por 03.10.2018 / 16:51
0

O que o cd faz é: alterar o diretório de trabalho do shell atual. Quando você inicia um script, outro shell (processo) é iniciado para executar o script. Esse processo de shell altera com sucesso o diretório de trabalho quando cd é executado, mas quando o script termina sua volta no shell anterior de onde você iniciou o script.

As formas de contornar isso são:

1) execute seu script por "sourcing", com:

bash$ source yourscript

ou (exatamente o mesmo):

bash$ . yourscript

Isso executará o script no shell atual, portanto cd mudará o diretório para esse processo e permanecerá em vigor após o término do script.

2) Defina um alias. Um comando com alias também será executado no processo shell atual. Veja a resposta de roaima como fazer isso.

    
por 03.10.2018 / 17:02
0

Não sei se é isso o que você realmente quer ou se acha que essa é a melhor solução para o que você pretende fazer.

git tem o -C <repopath> <command> <branch>

No caso da excursão

git -C /home/pol/dcu/practicum/gitrep checkout master'

Isso não retornará você para dentro do diretório desejado, mas talvez ajude.

    
por 03.10.2018 / 17:41