bashrc substituição preguiçosa

7

Como se obtém ~/.bashrc aliases para avaliar $() substituições em tempo de execução , em vez de no momento em que ~ / .bashrc é executado (ao abrir um terminal)?

Eu executo esse comando com frequência suficiente para adicionar um alias:

svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff

No entanto, quando eu adiciono a ~/.bashrc como um alias, vejo que as avaliações são codificadas nos valores que tinham no momento em que abri o terminal:

$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'

Se eu abrir um terminal em ~ , obtenho erros:

svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
svn: E155007: '/home/dotancohen' is not a working copy
$ alias
alias svnbranch='svn diff -r :HEAD  | colordiff'
$

Eu tentei essas duas variações do alias em ~/.bashrc , elas têm o mesmo efeito (como eu esperava):

alias svnbranch="svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff"
alias svnbranch="svn diff -r 'svn info | grep ^Revision | awk {'print $2'}':HEAD 'svn info | grep ^URL | awk {'print $2'}' | colordiff"

Como se obtém ~/.bashrc aliases para avaliar $() substituições em tempo de execução ?

Além disso, como alguém poderia pesquisar essa situação no Google? Tentei pesquisar no google sobre "substituição de bashrc", "substituição lenta de bashrc" e outras frases-chave, mas descobri nada pelo que eu sinto deve ser uma questão bastante comum para encontrar informações.

    
por dotancohen 28.04.2015 / 12:00

1 resposta

10

Use aspas simples para suprimir o processamento de caracteres especiais. Você também pode barra invertida o $ s.

Para um comando complexo, é melhor você usar uma função em qualquer caso, o que não requer nenhum escape e é mais fácil de ler e editar:

svnbranch() {
    svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
}

Você pode definir uma função em qualquer lugar onde possa definir um alias.

    
por 28.04.2015 / 12:27