Existe alguma maneira de redefinir uma função bash em termos de sua antiga definição? Por exemplo, eu gostaria de adicionar o seguinte bloco de código ao preâmbulo da função 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
Atualmente, ele é definido em /etc/profile.d/PackageKit.sh e originado por scripts de inicialização do bash.
Dessa forma, posso consultar o valor de uma variável de ambiente no prompt de comando digitando simplesmente o nome da variável (e desde que não exista esse comando com esse nome). por exemplo
user@hostname ~:$ LANG
LANG=en_AU.utf8
Eu sei que poderia copiar e colar a definição atual e adicionar minhas próprias alterações ~/.bashrc
, mas estou procurando uma maneira mais elegante que envolva a reutilização de código.
Melhores maneiras de alcançar meu objetivo ou melhorias / extensões de código também são apreciadas.
eval
, você pode usar o indireção:local VAL=$(echo ${!1})
Respostas:
Você pode imprimir a definição atual da função e incluí-la em uma definição de função dentro de uma
eval
cláusula.Outra abordagem, que eu acho mais clara, é definir a função original sob um novo nome e chamar isso de sua definição. Isso funciona apenas se você não precisar agir sobre as variáveis locais da definição original.
fonte
declare -f
, mas gosto da maneira como você renomeia a função original.Obrigado @mat, @ dennis-williamson. Depois de ler seus comentários, é isso que eu recebi
Embora eu ache que prefiro a solução @Gilles.
fonte