Wie erhält man ~/.bashrc
Aliase, um $()
Substitutionen zur Laufzeit auszuwerten , anstatt zum Zeitpunkt der Ausführung von ~ / .bashrc (beim Öffnen eines Terminals)?
Ich führe diesen Befehl oft genug aus, um einen Alias dafür hinzuzufügen:
svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
Wenn ich es jedoch ~/.bashrc
als Alias hinzufüge , sehe ich, dass die Auswertungen fest auf die Werte codiert sind, die sie zum Zeitpunkt des Öffnens des Terminals hatten:
$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'
Wenn ich ein Terminal öffne, ~
erhalte ich folgende Fehler:
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'
$
Ich habe diese beiden Variationen des Alias ausprobiert. ~/.bashrc
Beide haben den gleichen Effekt (wie ich erwartet hatte):
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"
Wie erhält man ~/.bashrc
Aliase, um $()
Substitutionen zur Laufzeit zu bewerten ?
Wie würde man außerdem in Google nach dieser Situation suchen? Ich habe versucht, auf "bashrc substitution", "bashrc lazy substitution" und andere Schlüsselbegriffe zu googeln, aber ich habe nichts gefunden, was meiner Meinung nach häufig genug sein sollte, um Informationen zu finden.
$HOME/bin
in dasPATH
Verzeichnis gestellt, wenn Sie heutzutage ein solches Verzeichnis haben.alias cdp="cd ~/projects"
. Das geht in einem Shell-Skript nicht.Antworten:
Verwenden Sie einfache Anführungszeichen , um die Verarbeitung von Sonderzeichen zu unterdrücken. Sie könnten auch die s rückwärts schlagen.
$
Für einen komplexen Befehl ist es wahrscheinlich in jedem Fall besser, eine Funktion zu verwenden, die kein Escapezeichen erfordert und einfacher zu lesen und zu bearbeiten ist:
Sie können eine Funktion überall dort definieren, wo Sie einen Alias definieren können.
quelle
awk
hat auch einen Musterraumawk '/^Revision/{ print ...}'
Also braucht man in diesem Fall kein grep.