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

命令行应用程序:Unix cd命令,unix,command-line,Unix,Command Line,我的Mac OS命令行应用程序正在进行Unix调用,例如: system("rm -rf /Users/stu/Developer/file); 非常成功 那么,为什么下面的代码不更改当前目录呢 system("cd /Users/me/whatever"); system("pwd"); //cd has not changed 因为 system()通过调用/bin/sh-c命令执行命令中指定的命令,并在命令完成后返回 因此每个命令都是独立执行的,每个命令都在shell的一个新实例

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

system("rm -rf /Users/stu/Developer/file);
非常成功

那么,为什么下面的代码不更改当前目录呢

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

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

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

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


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

  • 不要使用
    系统(“rm-rf…”)
    使用
  • 不要使用
    系统(“cd…”)
    使用
  • 不要使用
    系统(“pwd…”)
    使用
当然,有一些不同之处,但这些都是您尝试做的基本等价物。

因为

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

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

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


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

  • 不要使用
    系统(“rm-rf…”)
    使用
  • 不要使用
    系统(“cd…”)
    使用
  • 不要使用
    系统(“pwd…”)
    使用
当然,有一些不同之处,但这些都是您尝试做的基本等价物