如何设置父进程的工作目录?

如标题所示,我们正在编写一个Unix风格的shell实用程序U,该实用程序应该从bash中调用(在大多数情况下)。

U到底如何更改bash(或一般来说是父级)的工作目录?

PS Shell实用程序chdir成功完成了相同的工作,因此必须有一种编程的方法来达到这种效果。


慕运维8079593
浏览 526回答 3
3回答

翻翻过去那场雪

不要这样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。

MM们

除了要求父进程自己更改其父目录外,没有其他“合法”的方法可以影响父进程的当前目录。chdir 在bash脚本中更改目录的不是外部实用程序,而是内置命令。

手掌心

chdir命令是内置的shell,因此可以直接访问执行它的shell的工作目录。Shell通常非常擅长保护自己免受脚本的影响,从而为子进程提供了Shell自身工作环境的副本。子进程退出时,将删除其使用的环境。您可以做的一件事就是“获取”脚本。这使您可以更改目录,因为从本质上讲,您是在告诉外壳程序执行文件中的命令,就像直接键入命令一样。即,您不是在外壳环境的副本上工作,而是在采购时直接在外壳环境上工作。
打开App,查看更多内容
随时随地看视频慕课网APP