두 번째 별칭 내에서 별칭 확장

두 번째 별칭 내에서 별칭 확장

다음을 수행할 수 있습니다.

alias tm=cd /opt/tomcat
alias tmbin=tm/bin

$ tmbin
$pwd
   /opt/tomcat/bin

??

나는 내가 할 수 있는 일을 안다:

alias tmbin=tm;cd bin

답변1

간단한 기능을 사용하는 것은 어떻습니까?

# may contain bashisms
function tm () { cd "/opt/tomcat/$1"; }
alias tmbin='tm bin' # if that really is necessary

아니면 좀 더 복잡한 것:

# more configurable
function tm () {
    cd /opt/tomcat
    case "$1" in
        "foo")
            # do something funky
            ;;
        "bar")
            # do something more funky
            ;;
    esac
}

답변2

실제로 방법이 있지만 내가 찾은 유일한 방법은 약간 복잡합니다. 예를 들어, 내가 무엇을 할 것인지(그런 간단한 별칭에는 권장하지 않지만...)

alias tm="cd /opt/tomcat"
tmp=`alias tm | cut -f2 -d"="`
tmp="${tmp%\'}"
tmp="${tmp#\'}"
alias tmbin="$tmp/bin" 

설명하다:

  • 먼저, cut과 alias를 사용하여 원래 명령을 별칭에 저장합니다.
  • 그런 다음 문자열이 필요하지 않기 때문에 첫 번째와 마지막 "\'"를 제거합니다.
  • 그런 다음 원래 별칭을 얻었고 해당 값을 사용하여 새 별칭을 만들 수 있습니다.

제 해결 방법이 전혀 좋지 않은 것 같지만, 혹시 더 좋은 해결 방법이 있으시면 알려주시면 감사하겠습니다 :)

편집: 동일하게 작동하는 더 짧은 솔루션

alias tm="cd /opt/tomcat"
tmp=`alias tm | cut -f2 -d"=" | cut -f2 -d"'"`
alias tmbin="$tmp/bin" 

어떤 별칭이라도 확장하는 데 사용할 수 있다는 점을 꼭 말씀드리고 싶습니다. 방금 테스트했는데 작동합니다. 별칭이 길어지면 어떻게 반응할지 모르겠습니다. 별칭이 길고 그 안에 "'"가 많이 포함된 경우 첫 번째 솔루션을 사용하여 첫 번째와 마지막 "'"를 제거하는 것이 좋습니다. 당신한테 달렸습니다. 도움이 되길 바랍니다.

답변3

여기에 좋은 대답이 있습니다스택 오버플로 질문

예를 들어 "-o"를 추가하여 "ls"의 별칭을 확장하려면 다음을 수행합니다.

eval "$(alias -p|grep '^alias ls='|sed "s/'$/ -o'/")"

관련 정보