Comment obtenir des ~/.bashrc
alias pour évaluer les $()
substitutions au moment de l'exécution , plutôt qu'au moment où ~ / .bashrc est exécuté (lors de l'ouverture d'un terminal)?
J'exécute cette commande assez souvent pour que je souhaite lui ajouter un alias:
svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
Cependant, lorsque je l'ajoute à ~/.bashrc
un alias, je vois que les évaluations sont codées en dur aux valeurs qu'elles avaient au moment où j'ai ouvert le terminal:
$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'
Si j'ouvre un terminal, ~
j'obtiens des erreurs:
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'
$
J'ai essayé ces deux variantes de l'alias dans ~/.bashrc
, elles ont toutes les deux le même effet (comme je m'y attendais):
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"
Comment obtenir des ~/.bashrc
alias pour évaluer les $()
substitutions au moment de l'exécution ?
De plus, comment rechercher cette situation dans Google? J'ai essayé de google sur "substitution bashrc", "substitution bashrc paresseux", et d'autres phrases clés, mais je n'ai rien trouvé pour ce que je pense être un problème assez courant pour trouver des informations.
$HOME/bin
dans lePATH
si vous avez un tel répertoire de nos jours.alias cdp="cd ~/projects"
. Impossible de le faire dans un script shell.Réponses:
Utilisez des guillemets simples pour supprimer le traitement des caractères spéciaux. Vous pouvez également annuler le
$
s.Pour une commande complexe, il vaut probablement mieux utiliser une fonction dans tous les cas, qui ne nécessite aucun échappement et est plus facile à lire et à modifier:
Vous pouvez définir une fonction partout où vous pouvez définir un alias.
la source
awk
a un espace de motif ainsiawk '/^Revision/{ print ...}'
donc pas besoin de grep dans ce cas.