Jak uzyskać ~/.bashrc
aliasy do oceny $()
podstawień w czasie wykonywania , zamiast w momencie wykonywania ~ / .bashrc (podczas otwierania terminala)?
Często uruchamiam to polecenie, aby dodać do niego alias:
svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
Jednak, gdy dodam go ~/.bashrc
jako alias, widzę, że oceny są zakodowane na sztywno do wartości, które miały w momencie otwarcia terminalu:
$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'
Jeśli otworzę terminal, ~
pojawią się błędy:
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'
$
Wypróbowałem te dwie odmiany aliasu ~/.bashrc
, oba mają taki sam efekt (jak się spodziewałem):
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"
Jak uzyskać ~/.bashrc
aliasy do oceny $()
podstawień w czasie wykonywania ?
Dodatkowo, jak szukać tej sytuacji w Google? Próbowałem google na „podstawienie bashrc”, „leniwe podstawienie bashrc” i inne kluczowe frazy, ale nie znalazłem niczego, co według mnie powinno być na tyle częstym problemem, by znaleźć informacje.
$HOME/bin
w katalogu,PATH
jeśli masz taki katalog.alias cdp="cd ~/projects"
. Nie można tego zrobić w skrypcie powłoki.Odpowiedzi:
Użyj pojedynczych cudzysłowów, aby ukryć przetwarzanie znaków specjalnych. Można również interpretacja odwrotnego ukośnika na
$
s.W przypadku złożonego polecenia prawdopodobnie lepiej jest użyć funkcji w każdym przypadku, która nie wymaga ucieczki i jest łatwiejsza do odczytania i edycji:
Możesz zdefiniować funkcję w dowolnym miejscu, w którym możesz zdefiniować alias.
źródło
awk
ma również przestrzeń wzorów,awk '/^Revision/{ print ...}'
więc nie ma potrzeby grep w tym przypadku.