Perintah chdir adalah built-in shell, sehingga memiliki akses langsung ke direktori kerja shell yang menjalankannya. Kerang biasanya cukup bagus dalam melindungi diri dari efek skrip, memberikan proses salinan kepada anak lingkungan kerja shell itu sendiri. Saat proses anak keluar, lingkungan yang digunakannya dihapus.
Satu hal yang dapat Anda lakukan adalah 'sumber' skrip. Ini memungkinkan Anda mengubah direktori karena pada dasarnya, Anda memberi tahu shell untuk menjalankan perintah dari file seolah-olah Anda telah mengetiknya secara langsung. Artinya, Anda tidak bekerja dari salinan lingkungan shell, Anda mengerjakannya secara langsung, saat sumber.
Tidak ada cara "legal" untuk memengaruhi direktori saat ini dari proses induk selain yang hanya meminta proses induk untuk mengubahnya sendiri.
chdir
yang mengubah direktori dalam skrip bash bukanlah utilitas eksternal, ini adalah perintah bawaan.
Jangan lakukan ini.
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);
Itu mungkin berfungsi, meskipun perhatikan bahwa pwd
Bash perintah di-cache dan tidak akan menyadarinya.