Como o comando bash “builtin” é definido?

Como o comando bash “builtin” é definido?

Percebi que um comando como cd ..é realmente convertido builtin cd ..e executado. Mas como é builtindefinido? which builtinnão mostra nada e não está em /bin, /usr/binetc. É 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. cde sourcesão exemplos.

Outros recursos integrados são integrados apenas para fins de eficiência. test(AKA [...]) e echosão exemplos.

Para saber mais, consulte a SHELL BUILTIN COMMANDSseção man bashou o site onlinemanual do bash. Para obter uma lista de recursos integrados disponíveis, execute helpno prompt de comando. Para obter informações sobre um determinado componente, digamos test, execute help test. Observe que isso help testfornecerá informações sobre o bash testintegrado, enquanto, por outro lado, man testprovavelmente fornecerá ajuda sobre o testcomando externo.

Quais comandos estão disponíveis como executáveis ​​e integrados

Com a -aopção, typeserã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 builtincomando:

$ builtin echo  1 2 3
1 2 3

informação relacionada