¿Cómo se obtienen ~/.bashrc
alias para evaluar las $()
sustituciones en tiempo de ejecución , en lugar de en el momento en que se ejecuta ~ / .bashrc (al abrir un terminal)?
Ejecuto este comando con suficiente frecuencia que me gustaría agregarle un alias:
svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
Sin embargo, cuando lo agrego ~/.bashrc
como un alias, veo que las evaluaciones están codificadas con los valores que tenían en el momento en que abrí el terminal:
$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'
Si abro un terminal, ~
entonces recibo errores:
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'
$
He probado estas dos variaciones del alias en ~/.bashrc
, ambos tienen el mismo efecto (como esperaba):
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"
¿Cómo se obtienen ~/.bashrc
alias para evaluar las $()
sustituciones en tiempo de ejecución ?
Además, ¿cómo buscaría esta situación en Google? He intentado buscar en Google "sustitución bashrc", "sustitución perezosa bashrc" y otras frases clave, pero no he encontrado nada para lo que considero que debería ser un problema lo suficientemente común como para encontrar información.
$HOME/bin
en elPATH
si tiene un directorio de este tipo en estos días.alias cdp="cd ~/projects"
. No se puede hacer eso en un script de shell.Respuestas:
Use comillas simples para suprimir el procesamiento de caracteres especiales. También puede hacer una barra diagonal inversa del
$
s.Para un comando complejo, probablemente sea mejor usar una función en cualquier caso, que no requiere ningún escape y es más fácil de leer y editar:
Puede definir una función en cualquier lugar donde pueda definir un alias.
fuente
awk
también tiene un espacio de patrón, asíawk '/^Revision/{ print ...}'
que no hay necesidad de grep en este caso.