Il comando chdir è integrato nella shell, quindi ha accesso diretto alla directory di lavoro della shell che lo esegue. Le shell di solito sono abbastanza brave a proteggersi dagli effetti degli script, dando al processo figlio una copia dell'ambiente di lavoro della shell. Quando il processo figlio esce, l'ambiente utilizzato viene eliminato.
Una cosa che puoi fare è "creare" uno script. Ciò ti consente di cambiare la directory perché in sostanza stai dicendo alla shell di eseguire i comandi dal file come se li avessi digitati direttamente. Cioè, non stai lavorando da una copia dell'ambiente della shell, stai lavorando direttamente su di esso, durante il sourcing.
Non esiste un modo "legale" per influenzare la directory corrente del processo genitore se non chiedendo semplicemente al processo genitore di cambiarla.
chdir
che cambia la directory negli script bash non è un'utilità esterna, è un comando integrato.
Non farlo.
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);
probabilmente funziona, anche se nota che pwd
di Bash il comando è memorizzato nella cache e non se ne accorgerà.