Percebi que um comando como cd ..
é realmente convertido builtin cd ..
e executado. Mas como é builtin
definido? which builtin
não mostra nada e não está em /bin
, /usr/bin
etc. É apenas parte do programa bash e está sendo tratado de forma diferente?
Responder1
builtins são apenas parte do bash. Você pode descobrir se um comando está integrado usando type
. Por exemplo:
$ type export cd source alias
export is a shell builtin
cd is a shell builtin
source is a shell builtin
alias is a shell builtin
Muitos comandos internos são integrados porque não podem funcionar de outra maneira. cd
e source
são exemplos.
Outros recursos integrados são integrados apenas para fins de eficiência. test
(AKA [...]
) e echo
são exemplos.
Para saber mais, consulte a SHELL BUILTIN COMMANDS
seção man bash
ou o site onlinemanual do bash. Para obter uma lista de recursos integrados disponíveis, execute help
no prompt de comando. Para obter informações sobre um determinado componente, digamos test
, execute help test
. Observe que isso help test
fornecerá informações sobre o bash test
integrado, enquanto, por outro lado, man test
provavelmente fornecerá ajuda sobre o test
comando externo.
Quais comandos estão disponíveis como executáveis e integrados
Com a -a
opção, type
serão exibidos todos os locais que contêm o comando nomeado. Por exemplo:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Como usar um executável quando um builtin está disponível
Se, por algum motivo estranho, você quiser usar um executável específico e não o shell embutido, tudo o que você precisa fazer é especificar o caminho:
$ /bin/echo "This is not the builtin"
This is not the builtin
Como os componentes internos normalmente têm mais recursos, isso normalmente só é útil para testes de compatibilidade.
Como executar o shell embutido quando ele está oculto por uma função ou alias
Se puder escolher, o shell normalmente escolherá executar o comando interno. A exceção é se o usuário tiver definido um alias ou função com o mesmo nome. Se você quiser ter certeza de que está executando o builtin, use o builtin
comando:
$ builtin echo 1 2 3
1 2 3