Como fazer o rastreio de alias com o hack de espaço funciona com o parâmetro fornecido

0

Eu tenho dois aliases watchExpand e l . Eu sei que você pode fazer o trabalho de expansão bash com aliases, colocando um espaço à direita da seguinte forma:

alias watchExpand='watch '

l é aliased para ls -larthiF --context . Então, quando eu digito o comando watchExpand l , funciona como um encanto.

No entanto, se eu fornecer um parâmetro para o comando watchExpand , por exemplo,

watchExpand -n 1 l

Meu l alias não funciona mais. Como posso obter expansão após os argumentos?

    
por 林果皞 21.10.2016 / 19:47

2 respostas

1

Aqui está a má ideia que eu acho que você está pedindo:

function watchExpand() {
  e=""
  for param in $@
  do
    if alias $param >/dev/null 2>&1
    then
      exp=$(alias $param | cut -d= -f2| sed -e s/^\'// -e s/\'\$//)
      e+=" $exp"
    else
      e+=" $param"
    fi
  done
  watch $e
}
    
por 21.10.2016 / 21:01
0

Eu descubro a solução do meu jeito.

Primeiramente, eu crio uma função chamada "addExpand" para adicionar o alias / fucntion mais fácil se eu quiser.

xb@dnxb:/tmp/t$ type -a addExpand
addExpand is a function
addExpand () 
{ 
    echo -e "#!/bin/bash\nshopt -s expand_aliases\n. ~/.bash_aliases 2>/dev/null\n$1"' "$@"' | sudo tee /usr/bin/e_"$1";
    sudo chmod +x /usr/bin/e_"$1"
}
xb@dnxb:/tmp/t$ addExpand l
#!/bin/bash
shopt -s expand_aliases
. ~/.bash_aliases 2>/dev/null
l "$@"

Depois de executar addExpand l , o alias l será criado como um arquivo executável denominado / usr / bin / e_l com o seguinte conteúdo:

xb@dnxb:/tmp/t$ cat /usr/bin/e_l
#!/bin/bash
shopt -s expand_aliases
. ~/.bash_aliases 2>/dev/null
l "$@"

Agora aproveite para usar a versão de expansão do alias / function:

xb@dnxb:/tmp/t$ watch --color -n 1 e_l /tmp //works like a charm !!!
xb@dnxb:/tmp/t$ 

Nota:

[1] e_l , prefixo com 'e_' para indicar a versão de expansão do comando.

[2] Eu me sinto muito pesado para realizar o sourcing a cada segundo se for executado com watch -n 1 . Talvez eu precise encontrar uma maneira de resolver esse problema.

[3] Outra desvantagem é que não resolve alias recursivamente.

    
por 21.10.2016 / 21:57