如标题所示,我们正在编写一个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。
手掌心
TA贡献1942条经验 获得超3个赞
chdir命令是内置的shell,因此可以直接访问执行它的shell的工作目录。Shell通常非常擅长保护自己免受脚本的影响,从而为子进程提供了Shell自身工作环境的副本。子进程退出时,将删除其使用的环境。
您可以做的一件事就是“获取”脚本。这使您可以更改目录,因为从本质上讲,您是在告诉外壳程序执行文件中的命令,就像直接键入命令一样。即,您不是在外壳环境的副本上工作,而是在采购时直接在外壳环境上工作。
- 3 回答
- 0 关注
- 551 浏览
添加回答
举报
0/150
提交
取消