chdir コマンドはシェルに組み込まれているため、コマンドを実行するシェルの作業ディレクトリに直接アクセスできます。シェルは通常、スクリプトの影響から身を守るのに非常に優れており、子プロセスに コピー を提供します。 シェル自身の作業環境の。子プロセスが終了すると、それが使用していた環境は削除されます。
できることの 1 つは、スクリプトを「ソース化」することです。これにより、ディレクトリを変更できます。これは、本質的には、コマンドを直接入力したかのように、ファイルからコマンドを実行するようにシェルに指示しているためです。つまり、シェルの環境のコピーから作業するのではなく、ソースを取得するときに直接作業しています。
親プロセスにそれ自体を変更するように要求する以外に、親プロセスの現在のディレクトリに影響を与える「合法的な」方法はありません。
chdir
これは、bash スクリプトでディレクトリを変更するものであり、外部ユーティリティではなく、組み込みコマンドです。
これをしないでください。
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);
おそらく ただし、Bash の pwd
に注意してください。 コマンドはキャッシュされ、気付かれません。