cd
Además de ser un shell integrado, en realidad también es un programa en sistemas operativos compatibles con POSIX. Ellos deben proporcionar ejecutables independientes para los servicios públicos regulares, como cd
. Este es por ejemplo el caso con Solaris , AIX , HP-UX y OS X .
Obviamente, un builtin cd
sigue siendo obligatorio ya que su implementación externa no cambia el directorio actual del shell. Sin embargo, este último todavía puede ser útil. Aquí hay un ejemplo que muestra cómo POSIX imagina cómo se cd
podría usar este comando:
find . -type d -exec cd {} \;
En un sistema POSIX, este oneliner informará un mensaje de error para todos los directorios en los que no está permitido cd
. Sin embargo, en la mayoría de las distribuciones de Gnu / Linux, falla con ese mensaje de error:
find: `cd': No such file or directory
Y aquí está la respuesta a su pregunta, " ¿Por qué cd no es un programa? " Por uno de los coautores originales de Unix. En una implementación muy temprana de Unix, cd
(escrito chdir
en ese momento) era un programa externo. Simplemente dejó de funcionar inesperadamente después de que fork
se implementó por primera vez.
Citando a Dennis Ritchie :
En medio de nuestro júbilo, se descubrió que el comando chdir (cambiar el directorio actual) había dejado de funcionar. Hubo mucha lectura de código e introspección ansiosa sobre cómo la adición de fork podría haber roto la llamada del chdir. Finalmente la verdad amaneció: en el viejo sistema chdir era un comando ordinario; ajustó el directorio actual del proceso (único) conectado al terminal. Bajo el nuevo sistema, el comando chdir cambió correctamente el directorio actual del proceso creado para ejecutarlo, ¡pero este proceso terminó rápidamente y no tuvo ningún efecto en su shell principal! Era necesario hacer de chdir un comando especial, ejecutado internamente dentro del shell. Resulta que varias funciones similares a comandos tienen la misma propiedad, por ejemplo, inicio de sesión.
Fuente: Dennis M. Ritchie, " La evolución del sistema de tiempo compartido Unix ", AT&T Bell Laboratories Technical Journal 63 (6), Parte 2, octubre de 1984, págs. 1577–93
La página de manual de chdir de Unix Versión 1 (marzo de 1971) dice:
Debido a que se crea un nuevo proceso para ejecutar cada comando, chdir sería ineficaz si se escribiera como un comando normal. Por lo tanto, es reconocido y ejecutado por Shell.