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. P>
En conséquence, j'ai trouvé les exécutables pour Cependant, je n'ai pas pu trouver l'exécutable pour Où est-il situé? p> ls, chmod, grep, chat code> in / bin. p>
CD code>. p>
7 Réponses :
Selon Ce , 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. p>
blockQuote> CD code> est Toujours une commande intégrée et jamais em> un exécutable: p>
cd code> fait partie de la coque; une commande interne. Il n'y a pas de binaire pour cela. P>
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. P>
CD est une coquille intégrée, malheureusement.
sh -c "cd /somedir; do something"
La commande Type était vraiment utile pour comprendre ce concept. Merci!
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. P>
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 code> binaire.
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 em>, ce qui signifie - vous devinez-le - qu'ils sont intégrés à la coquille. P>
La spécification unique Unix fait, en général, pas em> 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. P>
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 em> d'une manière que les exécutables ordinaires (voire réguliers intégré) ne peut pas (par exemple Notez que 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é: P>
Etant donné que CD affecte l'environnement d'exécution de shell actuel, il est toujours fourni sous forme de coquille régulier em>. p>
blockQuote>
Donc, la spécification ne nécessite pas Notez que parfois des utilitaires sont fournis à la fois comme intégré et em> comme exécutable. Un bon exemple est le code> utilitaire code>, 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 définir code>, qui définit des variables qui persistent même après définir code> sorties). Ces constructions spéciales sont: p>
pause code> li>
: code> li>
Continuer CODE> LI>
. code> li>
eval code> li>
exec code> li>
EXIT CODE> LI>
exportation code> li>
readonly code> li>
retour code> li>
définir code> li>
shift code> li>
fois code> li>
piège code> li>
non défini code> li>
ul>
CD code> est pas em> sur cette liste, ce qui signifie que CD code> n'est pas un intégré spécial. En fait, selon la spécification , il serait parfaitement légal de mettre en œuvre CD code> comme exécutable régulier. Il n'est tout simplement pas possible, pour les raisons données par les autres réponses. P>
CD code> pour être intégré, mais il est tout simplement impossible de faire autrement. p>
Homme CODE>, vous obtenez le manuel de l'exécutable code> exécutable (code code> code> intégré est documenté dans < Code> MAN Construits CODE>), mais lorsque vous exécutez code> Time CODE> Vous obtenez le temps code> code> intégré, qui ne prend pas en charge les mêmes fonctionnalités que le temps code> exécutable dont vous venez de lire le manuel. Vous devez explicitement exécuter / usr / bin / heure code> (ou quel que soit le chemin que vous avez installé Coreutils dans) pour obtenir l'exécutable. P>
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. P>