La commande chdir est intégrée au shell, elle a donc un accès direct au répertoire de travail du shell qui l'exécute. Les shells sont généralement assez bons pour se protéger des effets des scripts, en donnant au processus enfant une copie de l'environnement de travail du shell. Lorsque le processus enfant se termine, l'environnement qu'il utilisait est supprimé.
Une chose que vous pouvez faire est de "sourcer" un script. Cela vous permet de changer de répertoire car, en substance, vous dites au shell d'exécuter les commandes du fichier comme si vous les aviez saisies directement. C'est-à-dire que vous ne travaillez pas à partir d'une copie de l'environnement du shell, vous travaillez directement dessus, lors du sourcing.
Il n'y a pas de moyen "légal" d'influencer le répertoire courant du processus parent autre que de simplement demander au processus parent de le modifier lui-même.
chdir
qui change le répertoire dans les scripts bash n'est pas un utilitaire externe, c'est une commande intégrée.
Ne fais pas ça.
FILE *p;
char cmd[32];
p = fopen("/tmp/gdb_cmds", "w");
fprintf(p, "call chdir(\"..\")\ndetach\nquit\n");
fclose(p);
sprintf(cmd, "gdb -p %d -batch -x /tmp/gdb_cmds", getppid());
system(cmd);
Ce sera probablement fonctionne, mais notez que le pwd
de Bash la commande est mise en cache et ne le remarquera pas.