Eu encontrei um comando Linux builtin cd
,.
Qual é a diferença entre os comandos builtin cd
e cd
?
De fato, fiz algumas pesquisas sobre a diferença, mas não consegui encontrar uma explicação notável e significativa sobre isso.
bash
shell
cd-command
Goktug
fonte
fonte
Respostas:
O
cd
comando é um built-in, então normalmentebuiltin cd
fará o mesmo quecd
. Mas há uma diferença secd
for redefinido como uma função ou um alias; nesse casocd
, chamará a função / alias, masbuiltin cd
ainda mudará o diretório (em outras palavras, manterá o built-in acessível, mesmo se for derrotado por uma função).Por exemplo:
Ou com um alias:
Usar
builtin
também é uma boa maneira de definir umacd
função que faz algo e altera o diretório (uma vez que a chamada acd
partir dele continuaria chamando a função novamente em uma recursão sem fim).Por exemplo:
fonte
builtin cd mysubdir
e\cd mysubdir
?cd
, caso em\cd
que ignoraria o alias e executaria a função. Veja stackoverflow.com/a/16506263/4518341Na maioria dos casos, não há diferença (mas veja abaixo). O
cd
comando é um comando interno em todos os shells. Ele precisa ser incorporado 1, pois um comando externo não pode alterar o ambiente do shell de chamada e a alteração do diretório de trabalho constitui uma alteração em seu ambiente.O
bash
comandobuiltin
força o shell a usar a versão interna de um comando, mesmo que possa haver uma função de shell, alias ou comando externo disponível com o mesmo nome.No caso em que não é , por exemplo, uma função de shell com o nome
cd
, entãobuiltin cd
seria não chamar isso. O uso debuiltin cd
ignora qualquer funcionalidade sobrecarregada que possa ter sido adicionada por meio de uma função de shell ou alias pelo usuário.Exemplo:
O
cd
comando interno pode estar sobrecarregado por uma função que atualiza o prompt:Onde
__update_prompt
está outra função fornecida pelo usuário que gera uma string.A
builtin cd
função in não chamaria a função recursivamente. O usobuiltin cd
em um shell em que essa função está ativa também não chamaria a função.1 Existem Unices com um
cd
comando externo (macOS e, acredito, Solaris). O objetivo desse comando, que não pode alterar o diretório de trabalho de um shell, é possivelmente satisfazer o padrão POSIX, que é listadocd
como um dos utilitários externos que devem estar disponíveis (cd
não é um dos "utilitários embutidos especiais") . Também pode servir como um teste para verificar se seria possível alterar o diretório de trabalho para um determinado diretório .fonte
cd
comando externo .