命令行应用程序:Unix cd命令
我的Mac OS命令行应用程序正在进行Unix调用,例如:命令行应用程序: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的一个新实例
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…”)
使用
当然,有一些不同之处,但这些都是您尝试做的基本等价物