¿Puedo hacer que bash deje de analizar y validar un cierto alias?

8

Estoy usando Fedora 25, y he agregado el siguiente alias a mi perfil de bash:

alias releasenotes="dnf updateinfo --refresh info `dnf check-update | cut -d '.' -f 1 | xargs` | less"

(No puedo usar directamente dnf updateinfo infodebido a https://bugzilla.redhat.com/show_bug.cgi?id=1405191 )

Mi alias funciona, pero el comando tarda unos 10 segundos en ejecutarse, y dado que bash analiza y valida todos los alias cuando se genera el perfil, la creación de un nuevo shell produce un bloqueo de 10 segundos. Esto es molesto.

¿Hay alguna forma de hacer que bash no intente analizar y validar alias, o solo esa?

iLikeDirt
fuente

Respuestas:

9

Mi mejor conjetura es que probablemente deberías usar comillas simples alrededor de la definición de alias.

Sé que cuando se usan comillas dobles, las variables de shell se reemplazan con su contenido en la etapa de definición de alias (como dijiste analizar y validar) y backticks o sustitución de shell como $ (comando).

¡Una mejor explicación está en esta pregunta de Unix SE !

Si eso no ayuda a que el indicador se cargue más rápido, defina una función de shell en lugar de un alias.

editar: No olvides cambiar el argumento de corte a comillas dobles como el mencionado quijotesco.

hyph
fuente
Eso lo hizo! Respondiste primero, así que obtienes el crédito.
iLikeDirt
9

bashestá interpretando la cadena entre comillas, y esa interpretación ejecuta el dnf check-updatecomando incrustado . Esta ejecución es lo que toma el tiempo durante la definición del alias, no el dnf updateinfocomando principal que estás aliasando. Pruebe un ejemplo artificial basado en sleepy observe cómo el aliasmismo tarda 5 segundos:

alias sleep5="echo 'wake' ; `sleep 5` ; echo 'done'"

Use comillas simples para evitar la interpretación:

alias releasenotes='dnf updateinfo --refresh info `dnf check-update | cut -d "." -f 1 | xargs` | less'

No olvides cambiar el cutargumento por comillas dobles.

quijotesco
fuente