Comandos incorporados são sempre preferidos aos comandos externos. A lógica é que o comando interno é mais rápido (e, em alguns casos, como cd ou test -o BASH_OPTION , somente o comando interno pode ter o efeito desejado).
Às vezes, o comando externo pode ter recursos que o shell embutido não possui. Nesse caso, você pode chamar o comando externo dando um caminho explícito (ou seja, contendo uma barra) (isso ignora qualquer preocupação sobre o pedido em $PATH ). Se você não deseja codificar o caminho externo, mas deseja impedir o uso do incorporado, use "$(type -P test)" (nota capital P ) no bash, "$(whence -p test)" no ksh e =test em zsh.
Outra maneira de forçar o uso de um comando externo é usar o command builtin ( command -p test … ) ou passar pelo utilitário env ( env test … ).
No zsh, você pode desativar um arquivo incorporado com disable test . Isso é permanente (para o shell ou subshell atual) até que o builtin seja reativado com enable test . No bash, você pode fazer o mesmo com enable -n test para desativar e enable test para reativar.
Você pode usar um alias ou uma função para forçar a execução de um comando diferente, por exemplo, alias test=/usr/bin/test ou test () { /usr/bin/test "$@"; } . Se você tiver esse alias, poderá impedir seu uso citando qualquer parte dele, por exemplo, \test executará a função normal / pesquisa interna / externa. Observe que, dependendo do shell e suas configurações, as definições de alias em uma função podem ser expandidas quando uma função é lida ou quando é executada. Se você definiu uma função, você pode usar command test para evitar a pesquisa de função, bem como a pesquisa de alias (então aqui o test builtin será invocado a menos que seja desativado).