命令行应用程序:Unix cd命令

时间:2013-07-11 01:42:16

标签: unix command-line

我的Mac OS命令行应用程序正在进行Unix调用,例如:

system("rm -rf /Users/stu/Developer/file);

完美成功。

那么为什么以下不改变当前目录?

system("cd /Users/me/whatever");
system("pwd");    //cd has not changed

1 个答案:

答案 0 :(得分:4)

因为

  

system()通过调用 /bin/sh -c command 执行 command 中指定的命令,然后返回命令完成后。

因此每个命令都是独立执行的,每个命令都在shell的一个新实例中执行。

因此,您的第一个调用会生成一个新的sh(包含您当前的工作目录),更改目录,然后退出。然后第二个调用产生一个新的sh(再次在你的CWD中)。

请参阅man page for system()


更好的解决方案是to not use system。它有一些固有的缺陷,可以让你对安全漏洞开放。您应该使用等效的POSIX C函数,而不是执行system()命令。您可以从命令行执行 Everything ,可以使用C函数(您认为这些实用程序如何工作?)

  • 而不是system("rm -rf ...")使用this
  • 而不是system("cd ...")使用chdir()
  • 而不是system("pwd ...")使用getcwd()

当然,存在一些差异,但这些是您尝试做的事情的基本等价物。