我的Mac OS命令行应用程序正在进行Unix调用,例如:
system("rm -rf /Users/stu/Developer/file);
完美成功。
那么为什么以下不改变当前目录?
system("cd /Users/me/whatever");
system("pwd"); //cd has not changed
答案 0 :(得分:4)
因为
system()
通过调用/bin/sh -c
command
执行 command 中指定的命令,然后返回命令完成后。
因此每个命令都是独立执行的,每个命令都在shell的一个新实例中执行。
因此,您的第一个调用会生成一个新的sh
(包含您当前的工作目录),更改目录,然后退出。然后第二个调用产生一个新的sh
(再次在你的CWD中)。
更好的解决方案是to not use system
。它有一些固有的缺陷,可以让你对安全漏洞开放。您应该使用等效的POSIX C函数,而不是执行system()
命令。您可以从命令行执行 Everything ,可以使用C函数(您认为这些实用程序如何工作?)
当然,存在一些差异,但这些是您尝试做的事情的基本等价物。