Cómo hacer que el seguimiento de alias con el truco espacial funcione con el parámetro proporcionado

Cómo hacer que el seguimiento de alias con el truco espacial funcione con el parámetro proporcionado

Tengo dos alias watchExpandy l. Sé que puedes hacer que la expansión de bash funcione con alias colocando un espacio final como este:

alias watchExpand='watch '

ltiene el alias de ls -larthiF --context. Entonces, cuando escribo el comando, watchExpand lfunciona de maravilla.

Sin embargo, si proporciono un parámetro al watchExpandcomando, por ejemplo

watchExpand -n 1 l

Mi lalias ya no funciona. ¿Cómo puedo obtener la expansión de bash después de los argumentos?

Respuesta1

Aquí está la mala idea quepensarestás pidiendo:

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
}

Respuesta2

Zsh tiene alias globales. Podrías hacerlo:

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

y luego:

watch -n 1 @l

Tenga en cuenta que @no es obligatorio, pero lo uso para evitar que se invoquen los alias globales sin querer.

Respuesta3

Descubro la solución a mi manera.

En primer lugar, creo una función llamada "addExpand" para agregar alias/función más fácilmente si así lo deseo.

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 "$@"

Después de ejecutar addExpand l, el alias lse creará como un archivo ejecutable llamado/usr/bin/e_lcon el siguiente contenido:

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

Ahora disfrute de usar la versión ampliada de alias/función:

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

Nota:

[1] e_l, prefijo 'e_' para implicar la versión de expansión del comando.

[2] Me siento demasiado pesado para realizar el abastecimiento cada segundo si lo ejecuto watch -n 1. Quizás necesite encontrar una manera de resolver este problema.

[3] Otra desventaja es que no resuelve el alias de forma recursiva.

información relacionada