正如标题所揭示的那样,我们正在编写一个Unix风格的外壳实用程序U,它应该(在大多数情况下)从bash调用。
U究竟如何更改bash (或一般的父目录)的工作目录?
备注: shell实用程序chdir成功地完成了完全相同的操作,因此必须有一种编程方法来实现此效果。
发布于 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
命令是缓存的,不会被注意到。
发布于 2010-03-04 05:16:23
除了请求父进程自己更改目录之外,没有任何“合法”方法可以影响父进程的当前目录。
在bash脚本中更改目录的chdir
不是一个外部实用程序,它是一个内置命令。
发布于 2010-03-04 07:51:09
chdir命令是一个内置的shell,因此它可以直接访问执行该命令的shell的工作目录。shell通常很好地保护自己不受脚本的影响,为子进程提供了shell自己的工作环境的副本。当子进程退出时,它使用的环境将被删除。
你可以做的一件事是‘源’一个脚本。这让您可以更改目录,因为在本质上,您是在告诉shell执行文件中的命令,就好像您直接键入了这些命令一样。也就是说,你不是从shell环境的副本中工作,而是在采购时直接在它上面工作。
https://stackoverflow.com/questions/2375003
复制相似问题