Estender um alias no segundo alias [duplicado]

1

É possível fazer isso:

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

$ tmbin
$pwd
   /opt/tomcat/bin

??

Eu sei que posso fazer:

alias tmbin=tm;cd bin
    
por smolarek999 05.09.2013 / 10:11

3 respostas

2

Que tal usar uma função simples:

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

ou algo mais complexo:

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

Existe de fato um jeito, mas o único que encontrei foi meio complicado. Por exemplo, aqui o que eu faria (embora eu não o recomende para um apelido tão simples ...)

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

Explicação:

  • Primeiro, recebo o comando raw armazenado no alias usando o corte e alias.
  • Então eu removo o primeiro e o último "\" "porque não quero uma linha.
  • Depois disso, recebi o alias bruto e posso criar um novo um usando esse valor.

Embora eu ache que minha solução não seja boa e que alguém tenha uma melhor, por me avisar :)

EDITAR: Uma solução mais curta que funciona da mesma forma

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

Eu tenho que te dizer que ele pode ser usado para estender qualquer alias. Eu apenas testei e funciona, embora em aliases mais longos eu não saiba como isso iria reagir. No caso de um alias mais longo com muitos "'", é melhor usar a primeira solução que remove o FIRST e LAST "'". Você decide. Espero que ajude.

    
por 05.09.2013 / 10:29
0

Há uma boa resposta aqui nesta pergunta do stackoverflow

Por exemplo, para estender um alias de 'ls' adicionando um '-o' você faria

eval "$(alias -p|grep '^alias ls='|sed "s/'$/ -o'/")"
    
por 22.07.2014 / 12:53

Tags