2013-05-26 3 views
2
내가 함수 별칭

전달 별명

I로 인수를 인식하는 방법을 궁금하네요 리눅스에서 내 타이틀 상태로의 .bashrc 파일을 사용하는 방법을 배우고

안녕 모두 집이라는 별칭으로 정의 : alias home=$HOME

과 기능

function go(){ 
cd $1 
ls $1 
} 

로 정의 갈하지만 go home 을 수행 할 때 내가

를 얻을 수

bash: cd: home: No such file or directory ls: cannot access home: No such file or directory

가 나는

은 내가 어떻게 이것을 구현하는 방법에 대한 갈 것이라고 $ HOME을 이동해야 할 때?

+0

당신은 그냥 할 수있는' go $ HOME'? – alex

+0

또는 단순히 인수없이'cd'? –

+0

@GregHewgill 위의 예제를 얻으려면'cd && ls'가 될 것입니다. – alex

답변

5

별명이 대체 단어하지만 작은 새로 생성 된 명령되지 않습니다 : 그래서

$ alias bla=ls 
$ bla 
file1 
file2 
file3 
… 

, 그것은 방법으로 사용할 수 없습니다 너는 생각했다.

당신은이에 대한 변수를 대체 사용할 수도 있습니다

: 당신이 남용이라고에도 불구하고 별칭을 사용하려는 경우

$ home=$HOME 
$ function go() { 
    cd "$(eval echo \$"$1")" 
} 
$ go home 

이 시도 :

$ alias home=$HOME 
$ function go() { 
    cd "$(type "$1" | sed -e 's/.*is aliased to .//' -e 's/.$//')" 
} 
$ go home 
+0

+1입니다! :) –

+2

+1. bash :'go() {cd "$ {! 1}"에서 [variable indirection] (http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)을 사용할 수 있습니다. ; }; 집에 가자. –

+0

멋진 트릭, @ 글렌 :) – Alfe

3

난 당신이 인수 별칭 여부를 확인하는 함수 내부 type -t를 사용할 수, 함수가 문자 그대로 귀하의 질문에 대답 할 때의 별명

으로 인수를 인식하는 방법을 궁금하네요. 그러나 그것은 아마도 당신이 원하는 것이 아닙니다.

AFAIK, 실제로 원하는 것은 불가능합니다. Bash manual (강조 내)에서 :

별명이 간단한 명령의 제 단어로 사용될 때 문자열 단어 대체 될 수 있습니다.

당신이 얻을 수있는 가장 가까운입니다 :

go `home` 
+0

해답을 가져 주셔서 감사합니다. @Alfe는 약간의 변경을가했지만 매우 유용했습니다 (특히 링크). 그러나 +1에 대한 대답은 여전히 ​​권장 된 남용에 대해 – Alex