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 do Solaris , AIX , HP-UX e OS X .
Obviamente, um cd
embutido 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 visualiza como esse comando cd
pode ser usado:
find . -type d -exec cd {} \;
Em um sistema POSIX, este oneliner reportará uma mensagem de erro para todos os diretórios que você não tem permissão para cd
in. Na maioria das distribuições do Gnu / Linux, ele 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
na época) era um programa externo. Ele parou de funcionar inesperadamente depois que fork
foi implementado pela primeira vez.
Citações Dennis Ritchie :
In the midst of our jubilation, it was discovered that the chdir (change current directory) command had stopped working. There was much reading of code and anxious introspection about how the addition of fork could have broken the chdir call. Finally the truth dawned: in the old system chdir was an ordinary command; it adjusted the current directory of the (unique) process attached to the terminal. Under the new system, the chdir command correctly changed the current directory of the process created to execute it, but this process promptly terminated and had no effect whatsoever on its parent shell! It was necessary to make chdir a special command, executed internally within the shell. It turns out that several command-like functions have the same property, for example login.
Fonte: Dennis M. Ritchie, “ A Evolução do Sistema de Compartilhamento de Tempo Unix ”, AT & T Bell Laboratories Technical Journal 63 (6), Parte 2, out. 1984, pp.1577–93
Unix Versão 1 (março de 1971) chdir página de manual afirma:
Como um novo processo é criado para executar cada comando,
chdir seria ineficaz se fosse escrito como um
comando. Portanto, é reconhecido e executado pelo
Shell.