Os comandos internos são sempre preferidos aos comandos externos. A lógica é que o comando interno é mais rápido (e, em alguns casos, como cd
ou , apenas o comando interno pode ter o efeito desejado).test -o BASH_OPTION
Às vezes, o comando externo pode ter recursos que o shell interno não possui. Nesse caso, você pode chamar o comando externo, fornecendo um caminho explícito (ou seja, contendo uma barra) (isso ignora qualquer preocupação com a ordem em $PATH
). Se você não deseja codificar o caminho externo, mas deseja impedir o uso do built-in, use "$(type -P test)"
(note capital P
) no bash, "$(whence -p test)"
no ksh e =test
no zsh. Outra maneira de forçar o uso de um comando externo é usar o command
builtin ( command -p test …
) ou passar pelo env
utilitário ( env test …
).
No zsh, você pode desativar um builtin com disable test
. Isso é permanente (para o shell ou subshell atual) até que o builtin seja reativado enable test
. No bash, você pode fazer o mesmo com enable -n test
para desativar e enable test
reativar.
Você pode usar um alias ou 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 apelido, 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 de 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, pode command test
evitar a pesquisa de funções, bem como a pesquisa de alias (portanto, aqui o test
builtin será chamado, a menos que seja desativado).
/usr/bin/test -f "$file"
...