bashrc 게으른 대체 싶습니다. svn diff -r $(svn

~ / .bashrc가 실행될 때 (터미널을 열 때) 대신 런타임에 대체~/.bashrc평가$() 하기 위해 별칭을 얻는 방법은 무엇입니까?

이 명령을 자주 추가하여 별칭을 추가하고 싶습니다.

svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff

그러나 ~/.bashrc별명으로 추가 하면 터미널을 열 때 평가 한 값으로 평가가 하드 코딩됩니다.

$ alias
alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff'

터미널을 열면 ~오류가 발생합니다.

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'
$

에서 별칭의 두 가지 변형을 시도했지만 ~/.bashrc예상대로 동일한 효과가 있습니다.

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"

런타임에 대체 ~/.bashrc를 평가하기 위해 별명을 얻는 방법은$() 무엇입니까?

또한 Google에서 이러한 상황을 어떻게 검색합니까? 나는 “bashrc replacement”, “bashrc lazy replacement”및 기타 핵심 문구에 대해 Google을 시도했지만 정보를 찾을 수있을 정도로 일반적인 문제라고 생각되는 것은 없습니다.



답변

작은 따옴표 를 사용 하여 특수 문자 처리를 억제 하십시오 . 당신은 또한 수 백 슬래시 들. $

복잡한 명령의 경우 어떤 경우에도 함수를 사용하는 것이 좋습니다. 이스케이프가 필요없고 읽기 쉽고 편집하기 쉽습니다.

svnbranch() {
    svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff
}

별칭을 정의 할 수있는 곳이면 어디에서나 함수를 정의 할 수 있습니다.