首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何设置父进程的工作目录?

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

Stack Overflow用户
提问于 2010-03-04 05:13:43
回答 6查看 11.8K关注 0票数 27

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

U究竟如何更改bash (或一般的父目录)的工作目录?

备注: shell实用程序chdir成功地完成了完全相同的操作,因此必须有一种编程方法来实现此效果。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-04 05:36:52

不要这样做。

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命令是缓存的,不会被注意到。

票数 35
EN

Stack Overflow用户

发布于 2010-03-04 05:16:23

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

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

票数 7
EN

Stack Overflow用户

发布于 2010-03-04 07:51:09

chdir命令是一个内置的shell,因此它可以直接访问执行该命令的shell的工作目录。shell通常很好地保护自己不受脚本的影响,为子进程提供了shell自己的工作环境的副本。当子进程退出时,它使用的环境将被删除。

你可以做的一件事是‘源’一个脚本。这让您可以更改目录,因为在本质上,您是在告诉shell执行文件中的命令,就好像您直接键入了这些命令一样。也就是说,你不是从shell环境的副本中工作,而是在采购时直接在它上面工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2375003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档