bashrc 게으른 대체


10

~ / .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을 시도했지만 정보를 찾을 수있을 정도로 일반적인 문제라고 생각되는 것은 없습니다.


2
별명이어야하는 이유는 무엇입니까? 쉘 스크립트로 옮기고 완료하십시오. 요즘 같은 디렉토리를 가지고 있다면 대부분의 * ix 유형 시스템은에 $HOME/bin들어갑니다 PATH.
워렌 영

@WarrenYoung : 맞습니다.이 특정 인스턴스는 스크립트 일 수 있습니다. 그러나 다른 것들에 대한 별칭을 선호하기 때문에 여전히 답을 알고 싶습니다. 귀하의 질문을 "Bash가 스크립트가 될 수있는 경우 별칭을 지원하는 이유"로 일반화 할 수 있습니다.
dotancohen

왜 공감해야합니까? 질문을 어떻게 개선 할 수 있습니까? 나는 예제, 실패한 시도, 심지어 구글에 시도한 핵심 문구까지 제공했다.
dotancohen

@dotancohen : 별도로 요청해야한다고 생각합니다. 여기에 부분 답변을 드리겠습니다 alias cdp="cd ~/projects". 쉘 스크립트에서는 그렇게 할 수 없습니다.
워렌 영

답변:


11

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

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

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

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


2
awk패턴 공간도 awk '/^Revision/{ print ...}' 있으므로이 경우에는 grep이 필요 없습니다.
Valentin Bajrami
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.