Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C代码执行Bash命令_C++_Linux_Bash - Fatal编程技术网

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
命令。代码适用于诸如lsgeditecho等命令,但在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..
cd
file.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内置的命令,它不是程序(vs
ls
mkdir
)@Rahul如果您想在另一个目录中执行代码,您可以,只需将完整路径放在exec中-而不是“-c foo”say
-c\home\joe\foo
@rahul:那么有没有办法在当前终端会话中查看这些更改?@rahul没有。没有-因为当前会话没有更改。你不能做你想做的事
cd
是一个内置于shell的命令,它不是一个程序(vs
ls
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$