On Tue, 16 Oct 2001 11:09:10 +0200 (MEST), Marc SCHAEFER <[EMAIL PROTECTED]> wrote:
> On Tue, 16 Oct 2001, Thierry Lombardot wrote: > > > Pourquoi une commande telle que "cd" ne fonctionne pas dans un script shell? > > Cela découle du concept de sous-processus du shell: *chaque* commande est > exécutée dans un sous-shell, sauf les commandes internes du shell. Les > commandes internes sont par exemple: cd. > > Un sous-processus ne peut pas modifier l'environnement de son père (le > shell). Donc, la seule façon pour que ton cd fonctionne, est d'exécuter cd > dans le père. Une petite précision encore à tout ce qui a été dit. Distinguons - les commandes dont l'action se répercute de manière (plus ou moins) durable sur l'état - global - de la machine (système de fichier, etc) - les commandes dont l'action se répercute de manière (plus ou moins) durable sur l'état - local - du shell Dans la première catégorie : mkdir, touch, rm,... Dans la seconde catégorie : cd, set, trap,... Dans le premier cas, il importe peu (en principe) que la commande soit exécutée par le shell lui-même ou par un sous shell, alors que dans le second cas la différence est fondamentale, puisque les changements sont perdus lorsque le sous-shell se termine. Pour le cas de cd, il suffit de se souvenir que cette commande ne fait rien d'autre que de modifier la valeur de la variable (interne) CWD (current working directory) du shell courant. -- ___ _ ___ Jean-Albert FERREZ [EMAIL PROTECTED] ' / / \ \ EPFL - Chaire de Recherche Operationnelle - ROSO ,--/-/---\-\--------------------------------------------------------- \_/ / \ \ http://rosowww.epfl.ch/jaf/ -- http://www-internal.alphanet.ch/linux-leman/ avant de poser une question. Ouais, pour se désabonner aussi.