2010-09-18 19 views
7

He leído que se supone que los ejecutables para los comandos emitidos usando llamadas exec() se almacenan en directorios que son parte de la variable PATH.Ubicación del ejecutable cd

En consecuencia, encontré los ejecutables para ls, chmod, grep, cat en/bin. No se encontró el ejecutable para cd.

¿Dónde se ubica?

Respuesta

19

Un proceso sólo puede afectar a su propio directorio de trabajo. Cuando el shell ejecuta un ejecutable, se ejecuta como un proceso secundario, por lo que un ejecutable cd (si existiera) cambiaría el directorio de trabajo del proceso secundario sin afectar el proceso principal (el shell), por lo que el comando cd debe implementarse como shell incorporado que realmente se ejecuta en el propio proceso del shell.

+0

+1 para una explicación en profundidad –

+0

¿me puede decir algún otro binario alternativo para "cd" ?? – zappy

+0

@zappy Citando mi respuesta: "el comando cd debe implementarse como un shell incorporado". En otras palabras, no puede tener un binario 'cd'. –

2

Según this, cd es siempre un comando integrado y Nunca un ejecutable:

Desde cd afecta el entorno de ejecución de shell actual, siempre es proporcionado como una concha regulares incorporado.

2

cd es parte del shell; un comando interno. No hay binario para eso.

2

El comando cd está incorporado en el shell de línea de comandos. De lo contrario, no podría afectar el directorio de trabajo de su shell.

7

No todas las utilidades que puede ejecutar en un intérprete de comandos de shell realmente deben existir como ejecutables reales en el sistema de archivos. También se pueden denominar shell built-ins, lo que significa   – lo has adivinado   – que están integrados en el shell.

El Single Unix Specification hace, en general, no especificar si una utilidad tiene que ser proporcionada como un ejecutable o como un built-in, que queda como un detalle de implementación interna privada al proveedor del sistema operativo.

Las únicas excepciones son los llamados special built-ins, que debe se proporciona como muebles empotrados, debido a que afectan el comportamiento de la cáscara de una manera que los ejecutables regulares (o muebles empotrados incluso regulares) no se puede (por ejemplo set, que establece variables que persisten incluso después de que set sale).Esos muebles empotrados especiales son:

  • break
  • :
  • continue
  • .
  • eval
  • exec
  • exit
  • export
  • readonly
  • return
  • set
  • shift
  • times
  • trap
  • unset

Tenga en cuenta que cd es no en esa lista, lo que significa que cd no es una función especial incorporada. De hecho, according to the specification, sería perfectamente legal implementar cd como un ejecutable regular. Simplemente no es posible, por las razones dadas por las otras respuestas.

Y si se desplaza hacia abajo a la sección no normativa de la especificación, es decir, a la parte que no es oficialmente parte de la especificación, pero sólo meramente informativos, se encuentra que de hecho se menciona de forma explícita:

Como el cd afecta al entorno de ejecución del shell actual, siempre se proporciona como un shell normal incorporado.

Por lo tanto, la especificación no requiere cd para ser un built-in, pero es simplemente imposible hacer lo contrario.

Tenga en cuenta que a veces las utilidades se proporcionan como un built-in y como un archivo ejecutable. Un buen ejemplo es la utilidad time, que en un sistema GNU típico se proporciona como un ejecutable por el paquete Coreutils y como un shell incorporado por Bash. Esto puede generar confusión, porque cuando hace man time, obtiene la página de manual del ejecutable time (el time incorporado está documentado en man builtins), pero cuando ejecuta time obtiene el time incorporado, que no admite las mismas características como el ejecutable time cuya página de manual acaba de leer. Debe ejecutar explícitamente /usr/bin/time (o cualquier ruta en la que haya instalado Coreutils) para obtener el ejecutable.

0

También busqué el ejecutable de "cd" y no existe. Puede trabajar con chdir (nombre de ruta) en C, tiene el mismo efecto.

Cuestiones relacionadas