为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2019-11-19 15:11:58
如标题所示,我们正在编写一个Unix风格的shell实用程序U,该实用程序应该从bash中调用(在大多数情况下)。U到底如何更改bash(或一般来说是父级)的工作目录?PS Shell实用程序chdir成功完成了相同的工作,因此必须有一种编程的方法来达到这种效果。
查看完整描述

3 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

不要这样


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。


查看完整回答
反对 回复 2019-11-19
?
MM们

TA贡献1886条经验 获得超2个赞

除了要求父进程自己更改其父目录外,没有其他“合法”的方法可以影响父进程的当前目录。


chdir 在bash脚本中更改目录的不是外部实用程序,而是内置命令。


查看完整回答
反对 回复 2019-11-19
?
手掌心

TA贡献1942条经验 获得超3个赞

chdir命令是内置的shell,因此可以直接访问执行它的shell的工作目录。Shell通常非常擅长保护自己免受脚本的影响,从而为子进程提供了Shell自身工作环境的副本。子进程退出时,将删除其使用的环境。


您可以做的一件事就是“获取”脚本。这使您可以更改目录,因为从本质上讲,您是在告诉外壳程序执行文件中的命令,就像直接键入命令一样。即,您不是在外壳环境的副本上工作,而是在采购时直接在外壳环境上工作。


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 520 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信