Uma variável de ambiente com sinal de igual e operador &&

2

Eu quero criar uma variável de ambiente para este comando:

git --git-dir= echo test-folder/.git/ add Steps-to-follow.txt && git --git-dir= echo test-folder/.git/ commit

Este é um trecho relevante do meu ~/.bash_profile :

export git11='git --git-dir='
export equal==
export git12='test-folder/.git/ add Steps-to-follow.txt && git --git-dir='
export git13='test-folder/.git/ commit'

Eu tentei $variable-name um após o outro para todas essas variáveis, mas eu acho que o blob shell, ao expandir, não está passando do jeito que eu quero que apareça (devido à conformidade com padrões de algum tipo).

  1. Eu realmente não usei export equal== , mas eu o tenho lá (eu estava tentando algo aleatório para ele funcionar).

  2. Eu tentei canalizar os comandos, mas isso é estúpido, isso não deveria funcionar.

  3. Eu acho que o problema está com o sinal = na variável de ambiente (provavelmente está assumindo o início de alguma outra atribuição). A entrada do tipo de caractere meta não está funcionando (por exemplo, \= no lugar de = ).

Algumas ajudas serão realmente úteis.

    
por Avineshwar 04.04.2016 / 00:09

2 respostas

2

Eu não estou familiarizado com git , então eu realmente não entendo o que você está tentando fazer em particular, por que seu primeiro comando tem a palavra echo duas vezes, mas então você não colocou em suas variáveis? Mas eu acho que você quer fazer algo assim:

Avineshwar_func() {
    git --git-dir="$1" echo test-folder/.git/ add Steps-to-follow.txt  &&  git --git-dir="$2" echo test-folder/.git/ commit
}

e, em seguida, se você disser

Avineshwar_func foo bar

será equivalente a dizer

git --git-dir=foo echo test-folder/.git/ add Steps-to-follow.txt  &&  git --git-dir=bar echo test-folder/.git/ commit

Claro que você pode mudar o nome de Avineshwar_func para o que você quiser; por exemplo, git1 .

Depois de obter isso basicamente funcionando, você deve adicionar tratamento de erros; por exemplo,

git1() {
    if [ -d "$1" ]  &&  [ -d "$2" ]
    then
        git --git-dir="$1" echo test-folder/.git/ add Steps-to-follow.txt  &&  git --git-dir="$2" echo test-folder/.git/ commit
    else
        echo "Usage: git1 dir1 dir2"
        return 1
    fi
}
    
por 04.04.2016 / 01:27
0

Aqui está uma solução de trabalho para ele (teste RHEL 7):

$ export test1='git --git-dir'
$ export test2='my-folder/.git/ add Steps-to-follow.txt'
$ #; git --git-dir'
$ export test3='my-folder/.git/ commit'
$ export git1=$test1=$test2
$ export git2=$test1=$test3
$ $git1
$ $git2

Isso funcionará. Eu não posso dizer que esta é a solução mais ideal, no entanto, funciona da maneira que eu preciso e pode ser necessário. & & ou ; (para disparar vários comandos usando uma env. var.) não funcionou para mim da maneira que eu esperava que funcionasse e, portanto, mudei para esta solução aceitável por agora. Se alguém apresentar algo melhor ou alguma melhoria, por favor comente.

    
por 04.04.2016 / 02:57