【发布时间】:2013-07-09 03:43:25
【问题描述】:
我的 Mac OS 命令行应用程序正在进行 Unix 调用,例如:
system("rm -rf /Users/stu/Developer/file);
完美成功。
那么为什么下面没有改变当前目录呢?
system("cd /Users/me/whatever");
system("pwd"); //cd has not changed
【问题讨论】:
标签: unix command-line
我的 Mac OS 命令行应用程序正在进行 Unix 调用,例如:
system("rm -rf /Users/stu/Developer/file);
完美成功。
那么为什么下面没有改变当前目录呢?
system("cd /Users/me/whatever");
system("pwd"); //cd has not changed
【问题讨论】:
标签: unix command-line
因为
system()通过调用/bin/sh -ccommand执行 command 中指定的命令,并在命令完成后返回.
所以每个命令都是独立执行的,每个命令都在一个新的 shell 实例中。
因此,您的第一次调用会生成一个新的sh(使用您当前的工作目录),更改目录,然后退出。然后第二个调用产生一个新的sh(同样在你的 CWD 中)。
更好的解决方案是to not use system。它有一些固有的缺陷,可能会让您面临安全漏洞。您应该使用等效的 POSIX C 函数,而不是执行 system() 命令。 所有你可以从命令行做的事情,你可以用 C 函数做(你认为这些实用程序是如何工作的?)
当然存在一些差异,但这些是您尝试做的基本等价物。
【讨论】: