Em muitos casos, preciso criar funções com o mesmo nome de outros programas e não tenho ideia se é uma boa maneira de usar scripts bash.
Exemplo:
function echo () {
echo -n "$@" ;
}
Após o teste, parece que ele verifica os nomes das funções dentro do script antes dos caminhos do bin. Quero ter certeza sobre isso e qualquer outra informação que deva saber.
Responder1
echo() {
command echo -n "$@"
}
Usar command
aqui significa pedir o echo
comando (que está embutido aqui) em vez da função que de outra forma teria precedência.
E como aqui echo
também é um builtin (não é pesquisado no $PATH
BTW, pois os builtins têm precedência sobre os comandos do sistema de arquivos), você também pode fazer:
echo() {
builtin echo -n "$@"
}
Essa última abordagem é preferível em zsh
, onde command echo
seria executada /bin/echo
(exceto na sh
emulação).
Existem algumas variações sutis entre os shells, mas a ordem de precedência geralmente é:
- recursos especiais
- funções
- embutidos
- comandos em
$PATH
(e a ordem depende da ordem em$PATH
e nahash
tabela gerenciada pelohash
builtin)
Lembrando que aliases e palavras-chave na sintaxe do shell ( for
, if
...), quando não citados, são considerados antes destes.
A ordem de 1
e 2
é invertida em alguns shells como bash
ou zsh
. bash
não permite que funções sejam definidas com o mesmo nome de um recurso interno especial quando invocado como sh
.