No caso geral, o que você está tentando fazer não funciona realmente.
Com aliases, há praticamente apenas uma reconfiguração de string antes que a linha seja passada para execução.
Então, por exemplo, se você tiver
alias sudo='sudo '
alias foo='bar baz'
quando você digita sudo foo , a linha de comando é reescrita em sudo bar baz e é o que é executado. Isso é simples de reescrever a linha de comando.
Agora as funções são mais difíceis. Não são simples reescritas, mas uma avaliação completa; eles podem definir variáveis, alterar diretórios, abrir arquivos ... praticamente qualquer qualquer coisa que o shell possa fazer. E, mais importante, eles são executados no contexto do shell atual. Quando você executa sudo myfunction , nada disso é possível; em particular, os comandos sudo são executados como um subprocesso e, portanto, não podem afetar o shell atual.
A solução alternativa usada para itens como sudowrap mencionado acima é tentar trabalhar automaticamente em sudo bash -c 'myfunction() {...} ; myfunction' . Isso chama explicitamente uma nova subcamada bash e, em seguida, executa a função nessa subcamada. A chamada explícita deixa claro que coisas como configurar variáveis e afins não funcionarão :-) Ela permite um subconjunto limitado de funcionalidades.
O tipo de funções que você pode chamar dessa maneira pode ser melhor reescrito como scripts shell em vez de funções; então sudo pode chamá-los diretamente. O exemplo dado no link seria mais fácil se você tivesse duk convertido para um executável
#!/bin/bash
exec du -k "$@" | sort -n
Isso funcionará como esperado!