C++ 使用C代码执行Bash命令
我试图使用C++ 使用C代码执行Bash命令,c++,linux,bash,C++,Linux,Bash,我试图使用file.cpp执行一些简单的bash命令。代码适用于诸如ls、gedit、echo等命令,但在cd命令时失败 这是my file.cpp: #include <stdio.h> #include <unistd.h> int main() { char *cd[] = { "/bin/bash", "-c", "cd /etc", NULL }; execvp(cd[0]
file.cpp
执行一些简单的bash
命令。代码适用于诸如ls
、gedit
、echo
等命令,但在cd
命令时失败
这是my file.cpp:
#include <stdio.h>
#include <unistd.h>
int main() {
char *cd[] = {
"/bin/bash",
"-c",
"cd /etc",
NULL
};
execvp(cd[0], cd);
return 0;
}
当前目录未更改为/etc
。我已尝试将cd/etc
更改为cd..
,cdfile.cpp中的一些目录
,但没有成功
请指出我做错了什么。每个进程都有自己的当前目录
运行/bin/bash-c“cd/etc”
bash启动时,更改其当前目录,然后退出。无论您是使用exec
,还是fork
,然后使用exec
,还是system
,或者通过将其键入shell或其他方式来运行它,都会发生这种情况
它对运行它的shell的当前目录没有影响。每个进程都有自己的当前目录
运行/bin/bash-c“cd/etc”
bash启动时,更改其当前目录,然后退出。无论您是使用exec
,还是fork
,然后使用exec
,还是system
,或者通过将其键入shell或其他方式来运行它,都会发生这种情况
它对运行它的shell的当前目录没有影响。exec
type命令通常在它们自己的环境中运行。与中一样,它们不会影响其他任何东西,比如从中调用它们的进程。exec
type命令通常在它们自己的环境中运行。如中所示,它们不会影响任何其他内容,比如您从中调用它们的过程。那么,有没有办法在当前终端会话中查看这些更改?@Rahul没有。没有-因为当前会话没有更改。你不能做你想做的事cd
是shell内置的命令,它不是程序(vsls
或mkdir
)@Rahul如果您想在另一个目录中执行代码,您可以,只需将完整路径放在exec中-而不是“-c foo”say-c\home\joe\foo
@rahul:那么有没有办法在当前终端会话中查看这些更改?@rahul没有。没有-因为当前会话没有更改。你不能做你想做的事cd
是一个内置于shell的命令,它不是一个程序(vsls
或mkdir
)@Rahul实际上,如果您想在另一个目录中执行代码,您可以将完整路径放在exec中,而不是“-c foo”say-c\home\joe\foo
@Rahul:
rahul@Inspiron:~/Desktop$ g++ -Wno-write-strings file.cpp -o file
rahul@Inspiron:~/Desktop$ ./file
rahul@Inspiron:~/Desktop$