¿Hay alguna forma de redefinir una función bash en términos de su antigua definición? Por ejemplo, me gustaría agregar el siguiente bloque de código al preámbulo de la función 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
Actualmente está definido en /etc/profile.d/PackageKit.sh y proviene de scripts de inicio de bash.
De esa manera, puedo consultar el valor de una variable de entorno en el símbolo del sistema simplemente escribiendo el nombre de la variable (y siempre que no exista dicho comando con ese nombre). p.ej
user@hostname ~:$ LANG
LANG=en_AU.utf8
Sé que podría copiar y pegar la definición actual y agregar mis propios cambios ~/.bashrc
, pero estoy buscando una forma más elegante que implique la reutilización del código.
También se aprecian mejores formas de lograr mi objetivo o mejoras / extensiones de código.
eval
, puede usar indirección:local VAL=$(echo ${!1})
Respuestas:
Puede imprimir la definición actual de la función y luego incluirla en una definición de función dentro de una
eval
cláusula.Otro enfoque, que encuentro más claro, es definir la función original con un nuevo nombre y llamarlo desde su definición. Esto solo funciona si no necesita actuar sobre las variables locales de la definición original.
fuente
declare -f
, pero me gusta la forma en que cambia el nombre de la función original.Gracias @mat, @ dennis-williamson. Después de leer tus comentarios, esto es lo que obtuve
Aunque creo que prefiero la solución @Gilles.
fuente