Puis-je faire en sorte que bash arrête l'analyse et la validation d'un certain alias?


8

J'utilise Fedora 25 et j'ai ajouté l'alias suivant à mon profil bash:

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

(Je ne peux pas utiliser directement à dnf updateinfo infocause de https://bugzilla.redhat.com/show_bug.cgi?id=1405191 )

Mon alias fonctionne, mais l'exécution de la commande prend environ 10 secondes, et puisque bash analyse et valide tous les alias lorsque le profil est généré, la création d'un nouveau shell entraîne un blocage de 10 secondes. C'est énervant.

Existe-t-il un moyen de faire en sorte que bash n'essaye pas d'analyser et de valider les alias - ou simplement celui-là?

Réponses:


9

Ma meilleure supposition est que vous devriez probablement utiliser des guillemets simples autour de la définition de l'alias.

Je sais que lors de l'utilisation de guillemets doubles, les variables shell sont remplacées par leur contenu à l'étape de définition de l'alias (comme vous l'avez dit en analysant et en validant) et les astuces ou la substitution de shell comme $ (commande).

Une meilleure explication est dans cette question Unix SE !

Si cela n'aide pas à accélérer le chargement de l'invite, définissez une fonction shell au lieu d'un alias.

edit: N'oubliez pas de remplacer l'argument cut par des guillemets doubles comme mentionné par Quizotic.


Ça y est! Vous avez répondu en premier, vous obtenez donc le crédit.
iLikeDirt

9

bashinterprète votre chaîne entre guillemets, et cette interprétation exécute la dnf check-updatecommande intégrée . Cette exécution est ce qui prend du temps lors de la définition de l'alias, pas la dnf updateinfocommande principale que vous aliasez. Essayez un exemple artificiel basé sur sleepet notez comment cela aliasprend 5 secondes:

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

Utilisez des guillemets simples pour éviter l'interprétation:

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

N'oubliez pas de remplacer l' cutargument par des guillemets doubles.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.