Como fazer com que o alias trailing com space hack funcione com o parâmetro fornecido

Como fazer com que o alias trailing com space hack funcione com o parâmetro fornecido

Eu tenho dois apelidos watchExpande l. Eu sei que você pode fazer a expansão do bash funcionar com aliases colocando um espaço à direita assim:

alias watchExpand='watch '

lé alias de ls -larthiF --context. Então, quando digito o comando, watchExpand lele funciona perfeitamente.

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

watchExpand -n 1 l

Meu lalias não funciona mais. Como posso obter expansão do bash após argumentos?

Responder1

Aqui está a má ideia que eupensarvocê 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
}

Responder2

Zsh tem aliases globais. Você poderia fazer:

alias -g @l='ls -larthiF --context'

e então:

watch -n 1 @l

Observe que isso @não é obrigatório, mas eu o uso para evitar que os aliases globais sejam invocados involuntariamente.

Responder3

Eu descubro a solução do meu jeito.

Primeiramente, eu crio uma função chamada "addExpand" para adicionar alias/função mais facilmente, 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 lserá criado como um arquivo executável chamado/usr/bin/e_lcom 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 expandida do alias/função:

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

Observação:

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

[2] Sinto-me 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 o alias recursivamente.

informação relacionada