Existe-t-il un moyen de redéfinir une fonction bash en fonction de son ancienne définition? Par exemple, je voudrais ajouter le bloc de code suivant au préambule de la fonction command_not_found_handle ()
,
# Check if $1 is instead a bash variable and print value if it is
local VAL=$(eval echo \"\$$1\")
if [ -n "$VAL" ] && [ $# -eq 1 ]; then
echo "$1=$VAL"
return $?
fi
Il est actuellement défini dans /etc/profile.d/PackageKit.sh et provient de scripts de démarrage bash.
De cette façon, je peux interroger la valeur d'une variable d'environnement à l'invite de commande en tapant simplement le nom de la variable (et à condition qu'aucune commande de ce nom n'existe). par exemple
user@hostname ~:$ LANG
LANG=en_AU.utf8
Je sais que je pourrais simplement copier et coller la définition actuelle et ajouter mes propres modifications ~/.bashrc
, mais je cherche une manière plus élégante qui implique la réutilisation du code.
De meilleurs moyens d'atteindre mon objectif ou des améliorations / extensions de code sont également appréciés.
eval
, vous pouvez utiliser l'indirection:local VAL=$(echo ${!1})
Réponses:
Vous pouvez imprimer la définition actuelle de la fonction, puis l'inclure dans une définition de fonction à l'intérieur d'une
eval
clause.Une autre approche, que je trouve plus claire, consiste à définir la fonction d'origine sous un nouveau nom, et à l'appeler à partir de votre définition. Cela ne fonctionne que si vous n'avez pas besoin d'agir sur les variables locales de la définition d'origine.
la source
declare -f
, mais j'aime la façon dont vous renommez la fonction d'origine.Merci @mat, @ dennis-williamson. Après avoir lu vos commentaires, voici ce que j'ai
Bien que je pense que je préfère la solution @Gilles.
la source