【问题标题】:Command line app: Unix cd command命令行应用程序:Unix cd 命令
【发布时间】: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


    【解决方案1】:

    因为

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

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

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

    请参阅man page for system()


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

    • this代替system("rm -rf ...")
    • chdir()代替system("cd ...")
    • getcwd()代替system("pwd ...")

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

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2020-12-13
      • 2014-11-30
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 2019-09-01
      相关资源
      最近更新 更多