
Tengo dos alias watchExpand
y l
. Sé que puedes hacer que la expansión de bash funcione con alias colocando un espacio final como este:
alias watchExpand='watch '
l
tiene el alias de ls -larthiF --context
. Entonces, cuando escribo el comando, watchExpand l
funciona de maravilla.
Sin embargo, si proporciono un parámetro al watchExpand
comando, por ejemplo
watchExpand -n 1 l
Mi l
alias 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 l
se 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.