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