Qual cd eu estou usando?
Se você estiver no Bash%, ocd
será incorporado. O comando type confirma isso:
$ type -a cd
cd is a shell builtin
cd is /usr/bin/cd
cd is /bin/cd
O sistema usará a primeira coisa nesta lista, então o builtin será a opção preferida, e a única que funciona (veja a seção abaixo em O que é / bin / cd ).
O que é um builtin?
Eu gosto de pensar em builtins como funções que o Bash sabe fazer sozinho. Basicamente tudo o que você usa muito foi movido para o "kernel" do Bash, para que ele não precise executar um processo para cada vez.
Você sempre pode dizer explicitamente ao Bash que você quer um embutido usando o comando builtin
da seguinte forma:
$ builtin cd
Veja a ajuda sobre builtin
:
$ help builtin
Por que o cd não está no hash?
O hash destina-se apenas ao "hash" (também conhecido como "salvar" em um par de chave / valor) os locais dos arquivos, não para os códigos internos ou palavras-chave. A tarefa principal para hash
é economizar ao ter que percorrer o $PATH
a cada vez que procura executáveis usados com frequência.
Palavras-chave?
Estes são normalmente os comandos que fazem parte dos recursos da linguagem de programação do Bash.
$ type while
while is a shell keyword
$ type for
for is a shell keyword
$ type !
! is a shell keyword
Algumas coisas são implementadas de várias maneiras, como [
:
$ type -a [
[ is a shell builtin
[ is /usr/bin/[
[ is /bin/[
... e cd
como você descobriu.
O que é / bin / cd?
No meu sistema Fedora 19 /bin/cd
é na verdade um script de shell:
$ more /bin/cd
#!/bin/sh
builtin cd "$@"
Mas não faz o que você pensa. Veja estes outros Q & U Q & A para mais detalhes:
- Qual é o objetivo do 'cd' comando externo?
- " Por que não posso redirecionar uma saída de nome de caminho de um comando para "cd"?
Linha de fundo:
O POSIX requer que ele esteja lá e, nessa implementação, ele atua como um teste, confirmando que você pode alterar os diretórios para X, mas retornando um código de retorno confirmando ou negando que isso é possível.