cd
além de ser um shell embutido, também é um programa em sistemas operacionais compatíveis com POSIX. Eles devem fornecer executáveis independentes para utilitários regulares, como cd
. Este é por exemplo o caso com Solaris , AIX , HP-UX e OS X .
Obviamente, um built cd
-in ainda é obrigatório, pois sua implementação externa não altera o diretório atual do shell. No entanto, o último ainda pode ser útil. Aqui está um exemplo mostrando como o POSIX prevê como esse cd
comando pode ser usado:
find . -type d -exec cd {} \;
Em um sistema POSIX, este oneliner relatará uma mensagem de erro para todos os diretórios nos quais você não tem permissão para cd
entrar. Na maioria das distribuições Gnu / Linux, ela falha com essa mensagem de erro:
find: `cd': No such file or directory
E aqui está a resposta para sua pergunta, " Por que o CD não é um programa? ", De um dos co-autores originais do Unix. Em uma implementação muito antiga do Unix, cd
(escrito chdir
naquela época), havia um programa externo. Ele parou de funcionar inesperadamente após a fork
primeira implementação.
Citando Dennis Ritchie :
No meio de nossa alegria, foi descoberto que o comando chdir (alterar diretório atual) havia parado de funcionar. Havia muita leitura de código e introspecção ansiosa sobre como a adição de bifurcação poderia ter quebrado a chamada de chdir. Finalmente, a verdade surgiu: no sistema antigo, chdir era um comando comum; ajustou o diretório atual do processo (único) conectado ao terminal. Sob o novo sistema, o comando chdir alterou corretamente o diretório atual do processo criado para executá-lo, mas esse processo terminou imediatamente e não teve nenhum efeito no shell pai! Era necessário fazer do chdir um comando especial, executado internamente dentro do shell. Acontece que várias funções semelhantes a comandos têm a mesma propriedade, por exemplo, logon.
Fonte: Dennis M. Ritchie, “ A evolução do sistema de compartilhamento de tempo Unix ”, AT&T Bell Laboratories Technical Journal 63 (6), Parte 2, outubro de 1984, pp.1577–93
A página 1 do manual do chdir do Unix versão 1 (março de 1971) afirma:
Como um novo processo é criado para executar cada comando, o chdir seria ineficaz se fosse gravado como um comando normal. É, portanto, reconhecido e executado pela Shell.