8
votes

Emplacement de CD Exécutable

J'ai lu que les exécutables des commandes émises à l'aide d'appels Exec () sont censés être stockés dans des répertoires faisant partie de la variable de chemin.

En conséquence, j'ai trouvé les exécutables pour ls, chmod, grep, chat in / bin.

Cependant, je n'ai pas pu trouver l'exécutable pour CD .

Où est-il situé?


0 commentaires

7 Réponses :


2
votes

Selon Ce , CD est Toujours une commande intégrée et jamais un exécutable:

Etant donné que CD affecte l'environnement d'exécution du shell actuel, il est toujours fourni sous forme de coquille régulière intégrée.


0 commentaires

2
votes

cd fait partie de la coque; une commande interne. Il n'y a pas de binaire pour cela.


0 commentaires

2
votes

Le CD de commande est intégré dans votre coque de ligne de commande. Cela n'a pas pu affecter le répertoire de travail de votre coquille sinon.


0 commentaires

7
votes

CD est une coquille intégrée, malheureusement.

sh -c "cd /somedir; do something"


1 commentaires

La commande Type était vraiment utile pour comprendre ce concept. Merci!



22
votes

Un processus ne peut affecter que son propre répertoire de travail. Lorsqu'un exécutable est exécutable par la coquille, il exécute comme un processus enfant, un exécutable CD (s'il existait) (s'il existait) modifierait le répertoire de travail du processus enfant sans affecter le processus parent (la coquille), d'où la commande CD doit être mise en œuvre en tant que Shell intégré qui s'exécute réellement dans le processus de coquille.


2 commentaires

Pouvez-vous me dire tout autre binaire alternatif pour "CD" ??


@Zappy citant ma réponse: "La commande CD doit être mise en œuvre comme coquille intégrée". En d'autres termes, vous ne pouvez pas avoir de cd binaire.



7
votes

Tous les utilitaires que vous puissiez exécuter à une vitesse de shell nécessitent réellement des exécutables réels dans le système de fichiers. Ils peuvent également être appelés coquillés , ce qui signifie - vous devinez-le - qu'ils sont intégrés à la coquille.

La spécification unique Unix fait, en général, pas spécifie si un utilitaire doit être fourni sous forme d'exécutable ou intégré, laissé comme un détail de mise en œuvre interne privé au système d'exploitation Vendeur.

Les seules exceptions sont la soi-disant spécial intégré < / em> , que doivent être fournis comme intégrés, car ils affectent le comportement de la coque elle-même d'une manière que les exécutables ordinaires (voire réguliers intégré) ne peut pas (par exemple définir , qui définit des variables qui persistent même après définir sorties). Ces constructions spéciales sont:

  • pause
  • :
  • Continuer
  • .
  • eval
  • exec
  • EXIT
  • exportation
  • readonly
  • retour
  • définir
  • shift
  • fois
  • piège
  • non défini

    Notez que CD est pas sur cette liste, ce qui signifie que CD n'est pas un intégré spécial. En fait, selon la spécification , il serait parfaitement légal de mettre en œuvre CD comme exécutable régulier. Il n'est tout simplement pas possible, pour les raisons données par les autres réponses.

    Et si vous faites défiler jusqu'à la section non normative de la spécification, c'est-à-dire à la partie qui ne fait pas officiellement partie de la spécification, mais uniquement uniquement sur l'information, vous trouverez ce fait explicitement mentionné:

    Etant donné que CD affecte l'environnement d'exécution de shell actuel, il est toujours fourni sous forme de coquille régulier .

    Donc, la spécification ne nécessite pas CD pour être intégré, mais il est tout simplement impossible de faire autrement.

    Notez que parfois des utilitaires sont fournis à la fois comme intégré et comme exécutable. Un bon exemple est le utilitaire , qui sur un système GNU typique est fourni à la fois comme exécutable par le package Coreutils et en tant que coquille régulière intégrée par bash. Cela peut conduire à la confusion, car lorsque vous faites Homme , vous obtenez le manuel de l'exécutable exécutable (code intégré est documenté dans < Code> MAN Construits ), mais lorsque vous exécutez Time Vous obtenez le temps intégré, qui ne prend pas en charge les mêmes fonctionnalités que le temps exécutable dont vous venez de lire le manuel. Vous devez explicitement exécuter / usr / bin / heure (ou quel que soit le chemin que vous avez installé Coreutils dans) pour obtenir l'exécutable.


0 commentaires

0
votes

J'ai également cherché l'exécutable de "CD" et il n'y a pas de tel. Vous pouvez travailler avec CHDIR (pathname) en C, il a le même effet.


0 commentaires