Pretendo deixar mais claro como utilizar funções em shell, também pretendo abordar temas como retorno da função, declaração de constantes, variáveis locais, variáveis globais, argumentos para as funções etc. Espero que essa contribuição possa ajudar algumas pessoas no futuro.
Um dos problemas que tive que vale a pena ser documentado aqui foi quando uma das minhas funções tinha o mesmo nome que um comando, o bash sempre dá preferência a função e nunca ao comando, você têm algumas opções, a primeira e a mais simples é mudar o nome da função, porém digamos que na verdade essa função está em uma biblioteca que você fez, e que diversas pessoas já estão utilizando, mudar o nome quebraria diversos programas que estão funcionando corretamente, infelizmente você foi bem infeliz e deu o nome de 'sort' para a sua função.
Bem, alguém precisa usar o comando sort, e sua biblioteca juntos, o que fazer se não pudermos mudar o nome?
A primeira coisa que pensei foi em fazer um SORT=$(which sort), essa é a melhor solução que encontrei para esse problema.
Outra situação que me deparei foi bem parecida com essa, o grande problema é que alguém teve a infeliz idéia de chamar a função de 'cd'; como o comando cd é do próprio bash, ele não retorna nada quando fazemos 'which cd'; sendo assim a solução acima não funcionaria, o que fiz foi utilizar outro comando do shell o 'builtin', esse comando chama qualquer builtin do bash ignorando a função do mesmo nome.
[1] Comentário enviado por ux386 em 03/07/2008 - 22:50h
>A primeira coisa que pensei foi em fazer um SORT=$(which sort), essa é a melhor
> solução que encontrei para esse problema.
Assim como existe o "builtin" que podemos usar quando uma função sobrescreve um builtin,
existe também o "command", que sempre chama um comando externo, mesmo que haja uma
função com o mesmo nome.