我尝试使用file.cpp
执行一些简单的bash
命令。代码适用于ls
,gedit
,echo
等命令,但在cd
命令时失败。
这是我的file.cpp:
#include <stdio.h>
#include <unistd.h>
int main() {
char *cd[] = {
"/bin/bash",
"-c",
"cd /etc",
NULL
};
execvp(cd[0], cd);
return 0;
}
我在使用./file
编译后执行它,我的终端输出是,
rahul@Inspiron:~/Desktop$ g++ -Wno-write-strings file.cpp -o file
rahul@Inspiron:~/Desktop$ ./file
rahul@Inspiron:~/Desktop$
当前目录未更改为/etc
。我尝试在cd /etc
中将cd ..
更改为cd some_directory
,file.cpp
,但没有成功。
请指出我做错了什么。
答案 0 :(得分:2)
每个进程都有自己的当前目录。
当您运行/bin/bash -c "cd /etc"
Bash启动时,更改其当前目录,然后退出。无论您是使用exec
还是fork
然后exec
,还是system
运行,或者将其键入shell,或其他方式,都会发生这种情况。
它对您运行它的shell的当前目录没有影响。