Como obter ~/.bashrc
aliases para avaliar $()
substituições no 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 para ele:
svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
No entanto, quando o adiciono ~/.bashrc
como um alias, vejo que as avaliações são codificadas de acordo com os 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 ~
, recebo 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 ~/.bashrc
, ambas 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 obter ~/.bashrc
aliases para avaliar $()
substituições em tempo de execução ?
Além disso, como alguém pesquisaria essa situação no Google? Tentei pesquisar no google sobre "substituição do bashrc", "substituição do preguiçoso do bashrc" e outras frases-chave, mas não encontrei nada para o que considero ser um problema bastante comum para encontrar informações.
$HOME/bin
noPATH
diretório se você tiver esse diretório atualmente.alias cdp="cd ~/projects"
. Não é possível fazer isso em um script de shell.Respostas:
Use aspas simples para suprimir o processamento de caracteres especiais. Você também pode inverter as barras
$
.Para um comando complexo, é melhor usar uma função em qualquer caso, que não requer escape e é mais fácil de ler e editar:
Você pode definir uma função em qualquer lugar que possa definir um alias.
fonte
awk
tem um espaço padrão também.awk '/^Revision/{ print ...}'
Portanto, não há necessidade de grep neste caso.